过路牛人:我跪了,解法二我想破脑壳都想不到啊
0 点赞 评论 收藏
分享
2020-06-01 14:52
清华大学 Java HanChang:最后一张图和代码的逻辑其实不太符合,容易让人理解成把链表真的复制一遍黏上去……可以把图修改成虚线,这样误导会少一些吧。毕竟实际上代码只是把第一次遍历求长度差和第二次消去长度差后的双指针遍历用巧妙的方法结合在了一起,并没有实际上的复制和黏合操作。
0 点赞 评论 收藏
分享
2020-06-01 14:50
清华大学 Java 大数据的菜鸟:答案解释里说的模棱两可的,首先应该是 ret&(-ret),该运算的目的时为了找到两个数字的二进制位中第一个不相同二进制位,然后根据这个位置进行分组, ret&(-ret)也可以理解为 mask=1,while(ret&mask==0)mask<<=1。然后根据这个位置,在第二次进行for循环的时候,将原数组所有的元素根据i位置的不同进行分组并进行异或运算,由于其他的数字出现两次所以异或的二进制位结果会抵消掉,即n^n=0,所以最后的结果为我们要求的其中一个数num1^0=num1 [这里的0即为其他进入该分组且重复2次的数字异或的最后结果n^n^m^m....=0,并且无视元素顺序,结果都一样,可通过写demo证实],所以通过if-else进行分两组后求出我们需要的答案。
0 点赞 评论 收藏
分享
Duco:内存都被泄露光了。。。
0 点赞 评论 收藏
分享
蠢牛:O(2n)不就是O(n)吗。还要O(2n)
0 点赞 评论 收藏
分享
爱唱歌的大师兄又熬夜了:双指针,一个从头,一个从尾部,第一次找到的肯定是乘法最小的吧,就不用存储最小索引了吧
0 点赞 评论 收藏
分享
好想找工作:解法二:如果输入[1,2,3,4,-100],会得到结果4而不是10。 所以是不是要修改一下呢?增加一个bool变量,如果tmp曾经不为0,就可以标记一下?
0 点赞 评论 收藏
分享
牛客570912333号:18行leve1可还行
0 点赞 评论 收藏
分享
茜久:如果加个判断是否为'#'就有一部分通过不了了,不知道为什么
0 点赞 评论 收藏
分享
牛客693033693号:新的弹出的元素
0 点赞 评论 收藏
分享
夸克56:这个很巧妙, 两个栈的长度要实时的对齐, 保证pop操作不会影响最小值
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
张帆FZ:镜像的定义有误,交换了2 3 节点,以 2 3 节点为根节点的子树不用跟着交换吗?
0 点赞 评论 收藏
分享
关注他的用户也关注了: