- 算法
数学 - 核心思想
最开始想用桶排序的思路,但是JAVA数组的最长长度是31位,所以作罢。
后来采用老办法,统计每个位置1的个数
num & 1//确定最后一位是不是1
res |= ans[31-i] % m;//复原位置
- 代码
class Solution {
public int singleNumber(int[] nums) {
int[] ans = new int[32];
for(int num:nums){
for(int i = 0;i < 32;i++){
ans[i] += num & 1;
num >>>= 1;
}
}
int res = 0,m = 3;
for(int i = 0;i < 32;i++){
res <<= 1;
res |= ans[31-i] % m;
}
return res;
}
}