技巧

多数元素

简单#169Java时间 O(n)空间 O(1)

题目要做什么

非空数组中保证有一个数出现次数超过数组长度的一半,找出这个多数元素。

题目示例输入nums = [2,2,1,1,1,2,2]
题目示例输出2

01 为什么这样做

Boyer–Moore 投票法让不同元素互相抵消。票数为零时换候选;与候选相同则加一,否则减一。多数元素的数量超过其他元素总和,无法被完全抵消。

始终成立的条件

已扫描元素消去不同值配对后,剩余未抵消的票都属于当前候选。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public int majorityElement(int[] nums) {3        int candidate = 0, votes = 0;4        for (int x : nums) {5            if (votes == 0) candidate = x;6            votes += x == candidate ? 1 : -1;7        }8        return candidate;9    }10}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索