1.直接使用dict计数
class Solution:
def majorityElement(self, nums: List[int]) -> int:
a = {}
for i in nums:
if i not in a:
a[i] = 1
else:
a[i] += 1
return sorted(a.items(), key=lambda d: d[1])[-1][0
2.借用栈的思想,但也没严格写栈的代码,就直接用list代替了
缺点是只能比较两种元素谁更多,相同就加上,不同就抵消,最后保留的就是多数元素
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums1 = []
for i in nums:
if len(nums1) == 0:
nums1.append(i)
else:
if nums1[0] == i:
nums1.append(i)
else:
nums1.pop(0)
return nums1[0]
执行用时更久了
3.摩尔投票法
class Solution:
def majorityElement(self, nums: List[int]) -> int:
candidate = nums[0] #取第一个元素为候选人
count = 1 #假设初始票数为0
for i in nums: #从头开始遍历
if i == candidate: #与候选人相等,票数加一
count += 1
else:
count -= 1 #与候选人不相等,票数减一
if count == 0: #当票数为0时
candidate = i #更换下一位候选人
count = 1 #更新票数
return candidate