题目描述
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?
解题思路:
- once 出现一次;twice 出现两次;threes 出现三次
- 遍历数组记当前为 t
- twice |= once & t 出现两次就是 出现一次并且当前又出现的
- once ^= t 出现一次的就是跟当前不同的
- threes = twice & once 出现三次 就是出现两次并且出现一次
- once &= ~threes once中去除threes
- twice &= ~threes twice中去除threes
- 遍历完,返回once的值
public class Solution {
public int singleNumber(int[] A) {
int ones = 0;
int twoes = 0;
int threes;
for (int i = 0; i < A.length; i++) {
int t = A[i];
twoes |= t & ones;
ones ^= t;
threes = twoes & ones;
ones &= ~threes;
twoes &= ~threes;
}
return ones;
}
}