Given a non-empty array of integers, every element appears three times except for one, which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,3,2] Output: 3
Example 2:
Input: [0,1,0,1,0,1,99] Output: 99
就是 Int 32位,因为每个数字appear 3次,所以,每个位要么为3K+1,或者为3K.
取决于只出现一次的位是0,还是1.
这样思路就是取每一位相加,然后%3, 这样下来就是那个出现1次的数的位数,然后移动回去,加起来就是出现一次的数。
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for(int i = 0; i < 32; i++) {
int bit = 0;
for(int j = 0; j < nums.length; j++) {
bit += (nums[j] >> i) & 1;
}
bit = bit % 3;
single += (bit << i);
}
return single;
}
}