Given an integer array nums
where every element appears three times except for one, which appears exactly once. Find the single element and return it.
Example 1:
Input: nums = [2,2,3,2] Output: 3
Example 2:
Input: nums = [0,1,0,1,0,1,99] Output: 99
Constraints:
1 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
- Each element in
nums
appears exactly three times except for one element which appears once.
Follow up: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
class Solution:
def singleNumber(self, nums: List[int]) -> int:
bits = [0] * 32
for num in nums:
for i in range(32):
bits[i] += (num & 1)
num >>= 1
res = 0
for i in range(32):
if bits[i] % 3 != 0:
res |= (1 << i)
return res if bits[31] % 3 == 0 else ~(res ^ 0xffffffff)
class Solution {
public int singleNumber(int[] nums) {
int[] bits = new int[32];
for (int num : nums) {
for (int i = 0; i < 32; ++i) {
bits[i] += (num & 1);
num >>= 1;
}
}
int res = 0;
for (int i = 0; i < 32; ++i) {
if (bits[i] % 3 == 1) {
res |= (1 << i);
}
}
return res;
}
}