169 多数元素
摩尔投票法,两两碰撞
用哈希表解法空间复杂度是o(n),用摩尔投票法,空间复杂度是o(1),
摩尔投票法是两个两个的碰撞,进行厮杀。
https://www.bilibili.com/video/BV1it411V784?from=search&seid=3388060042056238482
136. 只出现一次的数字
位运算
https://www.bilibili.com/video/BV1Qb411e7PU?from=search&seid=11091946531737515097
利用位运算,异或的性质。
1.两个相同的数字,异或的结果是0
2.任何数字和0异或,结果是他本身。
剑指 Offer 56 - I. 数组中数字出现的次数
python逻辑运算
用来卡是第几位的。
h=1
while (h&tmp) == 0:
h = h << 1
class Solution(object):
def singleNumbers(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
# 所有数字异或的结果
tmp=0
for n in nums:
tmp=tmp^n
# 找到第一位不是0的
h=1
while (h&tmp) == 0:
h = h << 1
a=0
b=0
for n in nums:
# 根据该位是否为0将其分为两组
if (h&n) ==0:
a=a^n
else:
b=b^n
return [a,b]
剑指 Offer 56 - II. 数组中数字出现的次数 II
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for i in range(32):
cnt = 0
idx = 1<<i
for num in nums:
if num &idx != 0:
cnt = cnt+1
if cnt%3==1:
res = res|idx
return(res)
作者:jichenyeung
链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/solution/xiang-xi-zong-jie-kan-bu-dong-ni-gen-wo-xing-xi-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。