摘要:
摩尔投票法解决众数问题。
题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例1
输入: [1,2,3,2,2,2,5,4,2]
输出: 2
限制:
- $1 <= 数组长度 <= 50000$
注意:本题与主站 169 题相同:LeetCode 169. 多数元素
摩尔投票法
摩尔投票法维护一个候选人对象major
和一个计票对象cnt
;
在遍历数组过程中定义三种状态:
重置状态:当计票对象
cnt
为0时,当前数字设为候选人major
;
加权状态: 当major
与当前数字相等时,cnt++
;
对抗状态:当major
与当前数字不同时,cnt--
;
最终得到一个major
和cnt
,当确定原数组中存在超过一半的相同数(众数)时,major
即为该众数;当不确定是否存在众数时,需要判断major
是否为众数。
1 | /* |