1.题目描述
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99
2.思路
2.1 代码
将数组转换为二进制,并求出每一位个数,放入长度为32的count数组中(因为使用int类型,因此共32位)。然后再遍历count数组,某一位统计除以3的余数不为0,则只出现一次的那个数字在该位有值。
class Solution {
public int singleNumber(int[] nums) {
int[] count = new int[32];
for(int num : nums){
for(int i = 0; i < 32; i++){
count[i] += (num >> i) & 1;
}
}
int ans = 0;
for(int i = 0; i < 32; i++){
if (count[i] % 3 != 0) {
ans |= (1 << i);
}
}
return ans;
}
}
2.2 测试结果
通过测试
3.总结
- 数组元素转换为二进制进行处理,并统计每一位出现的个数
- 统计个数时使用nums元素右移的方式可以处理负数情况
- 计算每一位个数除以3余数,并判断余数是否为0
- int类型32位长