只出现一次的数字
题解:
空间复杂度比较小的算法是用异或算法比较出不同的数字,原理如下:
a^a=0
a^0=0
异或算法满足交换律和结合律:a ^ b ^ c = a ^ c ^ b = a ^ (b ^ c)
用示例2的数组解释:
4 ^ 1 ^ 2 ^ 1 ^ 2
= 1 ^ 1 ^ 2 ^ 2 ^ 4
= 0 ^ 0 ^ 4
= 4
数组中任何相同的数字,在异或算法后都等于0, 最后就能return出只出现一次的那个数字。
代码:
class Solution {
public int singleNumber(int[] nums) {
int result=0;
for (int i=0;i<nums.length;i++){
result=result^nums[i];
}
return result;
}
}
题目来源于力扣
https://leetcode-cn.com/explore/interview/card/top-interview-quesitons-in-2018/261/before-you-start/1106/