目录

0137:只出现一次的数字 II(★)

力扣第 137 题

题目

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

示例 1:

输入:nums = [2,2,3,2]
输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,99]
输出:99

提示:

  • 1 <= nums.length <= 3 * 104
  • -231 <= nums[i] <= 231 - 1
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

分析

要不用额外空间实现,有个非常巧妙的位运算方法:逻辑电路角度详细分析该题思路

解答

1
2
3
4
5
6
7
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        X, Y = 0, 0
        for Z in nums:
            Y = Y ^ Z & ~X
            X = X ^ Z & ~Y
        return Y

35 ms