给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入:【3,2,3】
输出:【3】
示例 2:
输入:【2,2,1,1,1,2,2】
输出:【2】
解答:使用摩尔投票法,摩尔投票法常用来求一个序列中出现次数大于【n/2】的元素,是一个线性时间复杂度和空间复杂度的算法,其基本过程如下:
首先定义两个变量:count——元素出现的次数,cur_num——当前元素
遍历序列,如果count=0,就把cur_num赋值为遍历到的元素,如果count!=0,若cur_num!=遍历到的元素,count-1,
若cur_num==遍历到的元素,count+1
遍历结束后,返回cur_num。
代码如下:
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
count = 0
cur_num = 0
for num in nums:
if count == 0:
count = 1
cur_num = num
else:
if cur_num == num:
count += 1
else :
count -= 1
return cur_num