剑指 Offer 56 - II. 数组中数字出现的次数 II
# 剑指 Offer 56 - II. 数组中数字出现的次数 II (opens new window)
# 1.二进制表示位运算
分析:开辟大小为32的二进制数组,统计每个数字的二进制表示。最后遍历32位二进制数组,如果该二进制位上对3取余数为1,说明只出现一次的数字在这个位置上的二进制表示为1。这种做法是通法。
- 注意这种方法仅限于答案所求的数字是唯一的。否则只能用哈希。
class Solution {
public int singleNumber(int[] nums) {
int[] counts=new int[32];
for(int i=0;i<nums.length;i++){
int temp=nums[i];
for(int j=0;j<32;j++){
counts[31-j]+=temp%2;
temp=temp>>>1;
}
}
int res=0;
for(int i=0;i<32;i++){
res=res*2+counts[i]%3;
}
return res;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57