137. Single Number II

1. Description

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.

2. Example

Example 1

Input: nums = [2,2,3,2]
Output: 3

Example 2

Input: nums = [0,1,0,1,0,1,99]
Output: 99

3. Constraints

  • 1 <= nums.length <= 3 * $10^4$
  • $-2^{31}$ <= nums[i] <= $2^{31}$ - 1
  • Each element in nums appears exactly three times except for one element which appears once.

4. Solutions

Bit Manipulation

n = nums.size()
Time complexity: O(n)
Space complexity: O(1)

class Solution {
public:
    int singleNumber(const vector<int> &nums) {
        int single_number = 0;
        for (int i = 0; i < 32; ++i) {
            int digit_count = 0;
            uint32_t mask = (uint32_t)1u << i;
            for (int num : nums) {
                if ((num & mask) != 0) {
                    ++digit_count;
                }
            }

            if (digit_count % 3 == 1) {
                single_number |= mask;
            }
        }

        return single_number;
    }
};
comments powered by Disqus