摘要:
摩尔投票法解决众数问题。
题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例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 | /* |