169.多数元素
169.多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
1 | 输入:[3,2,3] |
在数组中占比已经超过一半的数字
Solution:排序查找
1 | class Solution { |
因为元素在数组中的出现次数大于了n/2,所以下标为n/2的元素一定是多数元素
Solution1:Boyer-Moore 投票算法
Boyer-Moore 算法,我们首先给出 Boyer-Moore 算法的详细步骤:
- 我们维护一个候选众数
candidate和它出现的次数count。初始时candidate可以为任意值,count为0; 我们遍历数组
nums中的所有元素,对于每个元素x,在判断x之前,如果count的值为0,我们先将x的值赋予candidate,随后我们判断x:- 如果
x与candidate相等,那么计数器count的值增加1; - 如果
x与candidate不等,那么计数器count的值减少1。
- 如果
在遍历完成后,
candidate即为整个数组的众数。
1 | class Solution { |
投票算法证明:
- 如果候选人不是
major则major会和其他非候选人一起反对候选人,所以候选人一定会下台(coumt==0时发生换届选举) - 如果候选人是
major, 则major会支持自己,其他候选人会反对,同样因为major票数超过一半,所以major一定会成功当选


