137. 只出现一次的数字 II
题目
题解
方法一
- 直接用
哈希表
出现 3 次则从哈希表
移除,最后剩下的就是结果
class Solution {
public int singleNumber(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
Integer integer = map.getOrDefault(num, 0);
if (integer == 2) {
map.remove(num);
} else {
map.put(num, integer + 1);
}
}
for (Integer i : map.keySet()) {
return i;
}
return 0;
}
}
方法二
- 其余元素都出现
三次
,其中某个元素只出现一次
,将每个元素都转化为二进制
,则可能的结果为 4 个数都相同或者 3 个数都相同 - 同一位结果可能为
0000
、1111
、0001
、1110
- 通过位运算得出所有该位的和,对 3 进行取模则得出结果数字该位的值
class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for (int i = 0; i < 32; i++) {
int sum = 0;
for (int num : nums) {
// 最后一位的值
sum += num >> i & 1;
}
// 将不同的数补到 res 后面
res |= sum % 3 << i;
}
return res;
}
}
本文由mdnice多平台发布