leetcode面试题17.04小白能回,通透,简易
我看很多博主跟leetcode上面讲的一样,如果那个上面能看会,可能就不会又有人来这了,给大家分享一下我的解题思路,绝对相近,希望能帮到大家,如果能给个赞就更好啦
package Test1;
class Solution {
public static void main(String[] args) {
int[] nums={0,1,3};
System.out.println(missingNumber(nums));
}
public static int missingNumber(int[] nums) {
int res = 0;
/**
* res=res^i^s;如果i s一样的话那么i和s就消失 也就是res=res
* 这道题就利用了这点 若果不一样返回的是按位计算的值 什么叫按位计算?
* 2 (0010) 3(0011)
* 2^3=1
*/
for (int i = 0; i < nums.length; ++i) {
res ^= i;
res ^= nums[i];
}
/**
* 很多人最下面这部卡住了吧 我也是卡了半个小时 最后是出来的 以第一个例子
* {0,2,3}
* 经过循环之后的异或是
* 0^0 1^2 2^3 对吧 是这样的 但是观察你就会发现有一个最大的3也就是长度消不掉
* 这时候就需要我们再异或一个长度来抵消掉这个对于的3 就可
* 0^0 1^2 2^3 ^3
*/
res ^= nums.length;
return res;
}
}
希望大家给个赞支持一下 笔芯笔芯