题目
解题思路
不得不佩服大佬的思路,此次可以偷鸡的地方在除了某个元素只出现一次以外,其余每个元素均出现两次
,并且要求最好的时间复杂度是线性复杂度。
大佬说过:遇到对数字的操作且要求线性时间复杂度的,首要考虑的是运算问题。
综上,此题的最好的解法就是使用异或运算(^),异或运算(0 ^ 0 = 0)(1 ^ 1 = 0)(1 ^ 0 = 1)(0 ^ 1 = 1)
结合题目的特殊条件,当某一个数存在两个的时候,经过异或运算会变为0不影响最后的结果,所以从头遍历的所有的数字,返回所有数字经过异或运算后的结果,返回的结果就是最后的结果
代码
class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for (int i = 0; i < nums.length; i++) {
res = res ^ nums[i];
}
return res;
}
}