题目:
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。
参考代码:
def singleNumber(self, nums: List[int]) -> int:
ans = 0
for i in range(32):
total = sum((num >> i) & 1 for num in nums)
if total % 3:
# Python 这里对于最高位需要特殊判断
if i == 31:
ans -= (1 << i)
else:
ans |= (1 << i)
return ans
本人的漂亮烂代码:
反思:
- 想不出来。
- 主要是有符号数的处理:最高位是符号位,只要最高位有数,则说明最高位是负号。----还是不理解。
- 多个数的每个相同位相加:sum((num>>i)&1 for num in nums)