题目
题解
方法一
-
直接用 哈希表
出现 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 多平台发布