题目描述
解题思路:
- 首先可以将数字排序,然后检测一个数与向后移动两位的数是否相同,相同则往后移动三位,如此检测。
- 因为上一道题用到了位运算,所以想到也许也可以用位运算来进行解题
相关知识:
& 相同位的两个数字都为1,则为1;若有一个不为1,则为0。
| 相同位只要一个为1即为1。
^ 相同位不同则为1,相同则为0。
代码实现:
public int singleNumber(int[] nums) {
int seenOnce = 0, seenTwice = 0;
for (int num : nums) {
seenOnce = ~seenTwice & (seenOnce ^ num);
seenTwice = ~seenOnce & (seenTwice ^ num);
}
return seenOnce;
}