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.
You must implement a solution with a linear runtime complexity and use only constant extra space.
Input: nums = [2,2,3,2] Output: 3
Input: nums = [0,1,0,1,0,1,99] Output: 99
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.
impl Solution {
pub fn single_number(nums: Vec<i32>) -> i32 {
let mut bitcount = [0; 32];
let mut ret = 0;
for num in &nums {
for i in 0..32 {
if (num >> i) & 1 == 1 {
bitcount[i] += 1;
}
}
}
for i in 0..32 {
if bitcount[i] % 3 == 1 {
ret |= 1 << i;
}
}
ret
}
}