✉️1. 题目描述:
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
🌻2. 例子:
输入:nums = [3,2,3]
输出:3
😏3. 解题思路(自己的一些小想法):
1. 本体的解决方法有很多种在这里只是简单的讨论一下摩尔投票法 (注意该方法只能在一个元素是半数以上的时候)
2. 摩尔投票法中需要我们设置两个变量,候选人和票数(第一个元素为第一个候选人)
3. 对每个数组中的元素,如果与之前候选人一样,票数加一,如果不一样票数减一
4. 当票数==0时,更新新的候选人,和票数(1)
✨4. 代码:
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# 摩尔投票法(只能在必须一个元素是半数以上)
major = nums[0]
# 候选人
count = 1
# 票数
for i in range(1,len(nums)):
# 从第二个元素开始
if count == 0:
# 如果候选人没有票了
major = nums[i]
count = 1
# 新候选人,1票
else:
if nums[i] == major:
count +=1
# 一样元素加票
else:
count -=1
# 不一样减票
return major