题意:数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
解法1:
我们假设数组异或结果为 123...^1000 = T (此时的T中包含两个n),那么根据结合律和自反律,T^n 实际上就是1~1000的实际值的异或结果,原因的话,很简单,T中的两个n异或之后为0,也就是说T中已经没有n了,所以 T^n == 1~1000的实际值的异或结果
由上面的推导可知,我们把T再和1~1000的异或结果 去异或,则为所求的结果n
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
class Solution {
public int missingNumber(int[] nums) {
int k = nums.length, k1 = 0;
for (int i = 0; i < nums.length; i++) {
k = k ^ i;
k1 = k1 ^ nums[i];
}
return k ^ k1;
}
}
网友评论