您的位置:首页 > 其它

LeetCode Single Number II

2015-08-06 08:31 369 查看
原题链接在这里:https://leetcode.com/problems/single-number-ii/

这道题的关键就是要求no extra memory space. 所以就用到了bit manipulation.

思路就是维护一个32位的数组,因为int 都是32位的,外层loop是对应每一位,内层loop是算所有的数在这一位上出现次数的和。

Mod 3 后剩下的就是那个只出现了一次的数。

Note: 1. Check if current bit is 1 using:

nums[j] >> i & 1
但要注意的是bit operator >> & 都比 == operator 运算级别低,所以要加括号。

2. 给了一个array代表2进制的数,转化成10进制的数就是用

res += bitCounter[i]<<i


AC Code:

public class Solution {
public int singleNumber(int[] nums) {
if(nums == null || nums.length == 0){
return Integer.MIN_VALUE;
}

int res = 0;
int [] bitCounter = new int[32];
for(int i = 0; i < 32 ; i++){
for(int j = 0 ; j < nums.length; j++){
if((nums[j]>>i&1) == 1){ //error
bitCounter[i]= (bitCounter[i] + 1)%3;
}
}
}
for(int i = 0; i < 32; i++){
res  += bitCounter[i]<<i;
}

return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: