题目
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
代码实现
Map实现
class Solution {
public int singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
Integer value = map.getOrDefault(nums[i],0);
if(value == 2){
map.remove(nums[i]);
}
else {
map.put(nums[i],value + 1);
}
}
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
return entry.getKey();
}
return -1;
}
}
二进制位
其余元素都出现了三次,则对应的二进制位也应该是出现三次
class Solution {
public int singleNumber(int[] nums) {
int ans = 0;
for (int i = 0; i < 32; ++i) {
int total = 0;
//等价于统计第i位出现的次数
for (int num: nums) {
total += ((num >> i) & 1);
}
if (total % 3 != 0) {
ans |= (1 << i);
}
}
return ans;
}
}