题目描述
数组中数字出现的次数1:
https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/
数组中数字出现的次数2:
https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/
思路题解
数组中数字出现的次数1
class Solution:
def singleNumbers(self, nums: List[int]) -> List[int]:
n,m,i,j=0,1,0,0
for num in nums:n^=num
while m&n==0:m<<=1
for num in nums:
if num&m:i^=num
else:j^=num
return i,j
数组中数字出现的次数2
自动状态机(不会)
位运算
class Solution:
def singleNumber(self, nums: List[int]) -> int:
counts=[0]*32
for num in nums:
for j in range(32):
counts[j]+=num&1
num>>=1
res,m=0,3
for i in range(32):
res<<=1
res|=counts[31-i]%m
return res if counts[31]&m==0 else ~(res ^0xffffffff)
#举个例子 [ ]
# 位数 36 35 ... 32 31 30 29... 1 0
# 1 1 ... 1 1 0 1... 0 1
# ^ 0 0 ... 0 1 1 1... 1 1
# = 1 1 ... 1 0 1 0... 1 0
# ~ 0 0 ... 0 1 0 1... 0 1
set
如 3 7 3 3
set(nums)→3 7
sum(set(nums)) * 3 → 3 3 3 7 7 7
sum(set(nums)) * 3 - sum(nums)→ 3 3
(sum(set(nums)) * 3 - sum(nums)) // 2→ 3
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return (sum(set(nums)) * 3 - sum(nums)) // 2