题目所属分类
类似状态机的位运算
借鉴了状态机的思想 (0,0)-> (1,0)->(0,1)的转变
原题链接
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
代码案例:输入:nums = [3,4,3,3]
输出:4
题解
当我们遇到出现了其他三次 自己一次的情况 也就是%3 = 1 的时候 这时候ones就会为第二个状态(1,0) 否则就是第一个状态(0,0)
而第二个状态就是答案
class Solution {
public int singleNumber(int[] nums) {
int ones = 0 , twos = 0 ;
for(int x :nums){
ones = (ones ^x) & ~twos ;
twos = (twos ^ x ) & ~ones;
}
return ones ;
}
}