class Solution {
//这题必须从二进制的角度出发来思考问题,我们使用一个bit数组来统计int中32位数字个出现了多少次,如果出现的是3的倍数则说明出现一次的数字在这个位上为0,如果出现不是3的倍数则说明出现一次的数字在该位上是1
public int singleNumber(int[] nums) {
//首先统计每一位上1出现的个数
int[] bit = new int[32];
for(int num : nums){
for(int i = 0;i < 32;i++){
bit[i] += (num>>(31-i)) & 1;
}
}
//根据bit数组中出现的次数还原出我们所需要的数字
int result = 0;
for(int i = 0;i < 32 ;i++){
result = (result << 1) + bit[i] % 3;
}
return result;
}
}
只出现一次的数字java实现
最新推荐文章于 2022-11-13 11:08:08 发布