Leetcode---Single Number I & II
2018-03-16 20:20
405 查看
Given an array of integers, every element appears twice except for one. Find that single one.Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?public class Solution {
public int singleNumber(int[] A) {
if(A == null || A.length == 0) return 0;
int num = 0;
int[] a = new int[32];
for(int i = 0; i < 32; i++){
for(int j = 0; j < A.length; j++){
if(((A[j] >> i) & 1) > 0)
// if((A[j] & (1 << i)) != 0)
a[i] = (a[i] + 1) % 3;
}
num |= (a[i] << i);
}
return num;
}
}public class Solution {
public int singleNumber(int[] A) {
int ones = 0;
int twos = 0;
int threes = 0;
for(int n : A){
twos |= ones & n;
ones ^= n;
threes = twos & ones;
ones &= ~threes;
twos &= ~threes;
}
return ones;
}
}
/*
* Example
*
* A: 011,101,011,011
* ones = 000;
* twos = 000;
* threes = 000;
* i = 0
* A[0] = 011, twos = (000&011)|000 = 000
* ones = 000^011 = 011
* threes = 000
* i = 1
* A[1] = 101, twos = (011&101)|000 = 001
* ones = 011^101 = 110
* threes = 000
* i = 2
* A[2] = 011, twos = (110&011)|001 = 011
* ones = 110^011 = 101
* threes = ~(011&101) = 110
*
* i = 3
* A[3] = 011, twos = 010
* ones = 111
* threes = 101
*
* i = 4
* A[4] = 011, twos = 000
* ones = 101
* threes = 101
*/
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
public class Solution { public int singleNumber(int[] A) { int num = 0; for(int i = 0; i < A.length; i++) { num ^= A[i];//XOR } return num; } }Given an array of integers, every element appears three times except for one. Find that single one.Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?public class Solution {
public int singleNumber(int[] A) {
if(A == null || A.length == 0) return 0;
int num = 0;
int[] a = new int[32];
for(int i = 0; i < 32; i++){
for(int j = 0; j < A.length; j++){
if(((A[j] >> i) & 1) > 0)
// if((A[j] & (1 << i)) != 0)
a[i] = (a[i] + 1) % 3;
}
num |= (a[i] << i);
}
return num;
}
}public class Solution {
public int singleNumber(int[] A) {
int ones = 0;
int twos = 0;
int threes = 0;
for(int n : A){
twos |= ones & n;
ones ^= n;
threes = twos & ones;
ones &= ~threes;
twos &= ~threes;
}
return ones;
}
}
/*
* Example
*
* A: 011,101,011,011
* ones = 000;
* twos = 000;
* threes = 000;
* i = 0
* A[0] = 011, twos = (000&011)|000 = 000
* ones = 000^011 = 011
* threes = 000
* i = 1
* A[1] = 101, twos = (011&101)|000 = 001
* ones = 011^101 = 110
* threes = 000
* i = 2
* A[2] = 011, twos = (110&011)|001 = 011
* ones = 110^011 = 101
* threes = ~(011&101) = 110
*
* i = 3
* A[3] = 011, twos = 010
* ones = 111
* threes = 101
*
* i = 4
* A[4] = 011, twos = 000
* ones = 101
* threes = 101
*/
相关文章推荐
- LeetCode Single Number I & II 都符合两个问题额外要求的 通用解法 与 思考过程
- LeetCode_Single Number&Single NumberII
- [Leetcode] #136#137#260 Single Number I & II & III
- LeetCode Single Number I & II 都符合两个问题额外要求的 通用解法 与 思考过程
- LeetCode:Single Number I & II & III
- [LeetCode]Single Number, Single Number II & Single Number III
- LeetCode Single Number I & II
- 【LeetCode】136 & 137 & 260 - Single Number I & II &III
- 【LeetCode】Single Number I & II & III
- Leetcode: single-number && single-number-ii
- LeetCode: Single Number I && II
- [Leetcode]Single Number && Single Number II
- leetcode--single_number&&single_number_II
- LeetCode解题报告—— Sum Root to Leaf Numbers & Surrounded Regions & Single Number II
- leetcode -day8 Copy List with Random Pointer & Single Number I II
- 【leetcode】Single Number && Single Number II(ORZ 位运算)
- leetcode -- Single Number II &III- 位操作,没有理解
- [Leetcode]Single Number I&II
- 【leetcode】Single Number & Single Number II
- LeetCode:Single Number I && II