Leetcode #260. Single Number III
2017-06-30 本文已影响0人
尴尴尬尬先生
public class Solution {
public int[] singleNumber(int[] nums) {
int sum = 0,i=0;
int[] res = new int[2];
for(int num:nums)
sum^=num;
sum&=-sum; //获取到sum中最后一位二进制为1的位子,考虑到负数
/*不能用这种方式,因为要考虑到负数
for(i=0;i<32;i++){
if((sum>>i&1)==1)
break;
}*/
for(int num:nums){
if((num&sum)==0){
res[0]^=num;
}
else{
res[1]^=num;
}
}
return res;
}
}
参考链接
leetcode 137
public class Solution {
public int singleNumber(int[] nums) {
int res = 0;
int[] temp = new int[32];
for(int i=0;i<32;i++){
for(int num:nums){
int x = num>>i&1;
temp[i]+=x;
}
res|=temp[i]%3<<i;
}
return res;
}
}
寻找数组中只出现一次的数字,其他数字出现三次。
寻找每一个二进制位中,出现次数不为3的值。