***[Lintcode]Single Number II 落单的数 II
2016-11-13 17:30
375 查看
Given
Example
Given
分析:int型需要32位表示。因此对于每一位,计算数组中所有数组在该位的和mod3. 但是不满足one-pass要求
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
int res = 0;
for(int i = 0; i < 32; i++) {
int count = 0;
for(int j = 0; j < A.length; j++) {
if((A[j] & (1 << i)) != 0) count ++;
}
if(count % 3 != 0)
res |= (1 << i);
}
return res;
}
}
网上看了一下其他方法,确实有one-pass的方法。
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
int one = 0, two = 0, three = 0;
for(int i = 0; i < A.length; i++) {
two |= one & A[i];//one出现1次并且A[i]出现1次 则代表可以进位到two
one ^= A[i];//one和A[i]做异或 保证one中只保存出现一次的值
three = one & two;
one &= ~three;//如果three中某一位为1,那么one和two中该为清零
two &= ~three;
}
return one;//返回one,其中已经除去了出现三次的数
}
}
3*n + 1numbers, every numbers occurs triple times except one, find it.
Example
Given
[1,1,2,3,3,3,2,2,4,1]return
4
分析:int型需要32位表示。因此对于每一位,计算数组中所有数组在该位的和mod3. 但是不满足one-pass要求
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
int res = 0;
for(int i = 0; i < 32; i++) {
int count = 0;
for(int j = 0; j < A.length; j++) {
if((A[j] & (1 << i)) != 0) count ++;
}
if(count % 3 != 0)
res |= (1 << i);
}
return res;
}
}
网上看了一下其他方法,确实有one-pass的方法。
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
int one = 0, two = 0, three = 0;
for(int i = 0; i < A.length; i++) {
two |= one & A[i];//one出现1次并且A[i]出现1次 则代表可以进位到two
one ^= A[i];//one和A[i]做异或 保证one中只保存出现一次的值
three = one & two;
one &= ~three;//如果three中某一位为1,那么one和two中该为清零
two &= ~three;
}
return one;//返回one,其中已经除去了出现三次的数
}
}
相关文章推荐
- [LintCode] 落单的数 III Single Number III
- lintcode 中等题:Singleton number II 落单的数 II
- LintCode: Single Number II
- lintcode-medium-Single Number II
- 【LeetCode从零单刷】Single Number II
- LeetCode 2.1.24 Single Number II
- LeetCode: Single Number II
- 137. Single Number II
- LeetCode: Single Number I && II
- LeetCode OJ : Single Number II
- LeetCode137:Single Number II
- Single Number & Single Number II
- Single Number & Single Number II
- Single Number II的位操作解法
- LeetCode:Single Number I && II
- leetcode_137 Single Number II
- LeetCode——Single Number II
- Single Number II
- **[Lintcode]Ugly Number II 丑数 II
- 位运算-Single Number II(给定一个数组,除了一个数字出现一次,其他都出现三次,求出现一次的数)