Bit Manipulation - LeetCode

141 阅读1分钟

Q****137. Single Number II

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 {
    public int singleNumber(int[] nums) {
        int a = 0, b = 0;
        for(int i : nums) {
            a = ~b & (a ^ i);
            b = ~a & (b ^ i);
        }
            
        return a;
    }
}