题目
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
解题思路
解法1
统计每个数出现的次数,求最大的那个
解法2
众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
所以可以先排序,然后取中间的那个元素
解法3
摩尔投票法 注意 !!! 这个方法只可以用来求众数(必须超过数组长度的一半)
伪代码:
- m=0 c=0
- 对于输入序列中的每个元素num
如果c== 0, 那么 m = num 并且 c = 1
如果m == x, 那么c++,
否则的话c– - 返回m
class Solution:
@staticmethod
def majorityElement(nums) -> int:
'''
摩尔投票法
'''
res = 0
c = 0
for num in nums:
if c == 0:
c = 1
res = num
elif res == num:
c += 1
else:
c -= 1
return res