根据题目说明,我们的算法应该具有线性的时间复杂度,并且时间复杂度是常数。
我只想到了暴力解法和排序双指针的算法。并没有想到位运算,加上对位运算也不熟悉,因此做个笔记。
异或具有的三个性质:
- 任何数和0做异或运算,结果仍然是原来的数
- 任何数和其自身做异或运算,结果是0
- 异或运算满足交换律和结合律
public int singleNumber(int[] nums) {
int single = 0;
for (int num : nums) {
single ^= num;
}
return single;
}
}