您的位置:首页 > 其它

leetcode 137 && 360一面算法 &&有道一面

2017-08-18 21:16 399 查看
题目描述:给一个数组,有一个数出现了两次或者1次,而其他数都出现了三次,找出这个数。其实对应了leetcode 137。

网上的解法多是位运算
public int singleNumber(int[] nums) {
int ans = 0;
for(int i = 0; i < 32; i++) {
int sum = 0;
for(int j = 0; j < nums.length; j++) {
if(((nums[j] >> i) & 1) == 1) {
sum++;
sum %= 3;
}
}
if(sum == 1) {
ans |= sum << i;
}
if(sum == 2) {
ans |= sum/2 << i
}
}    return ans;
}
利用位运算,求每位1出现的次数,出现3次的最后加起来%3==0. !=0的要么是1次,要么是2次。分情况讨论就行。最后的| 或运算,很强哦。。。

有道给的是一个数出现了一次,其他数都出现了三次,找出这一个数,对应LeetCode137题!位运算
class Solution {
public int singleNumber(int[] nums) {
int length = nums.length;
int result = 0;
for(int i = 0; i<32; i++){
//int count = 0;
int temp = 0;
for(int j=0; j<length; j++){
temp+=(nums[j]>>i & 1);
//count++;
}
//if(count %3==1)
result |= (temp%3)<<i;
}
return result;
}
}
当时写的时候出现了一点小小的问题,就是最后 | 的时候,忘记左移回来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode