这是道简单题,只想到了暴力解法,就是用集合存储起来,然后找出其中的众数,看了一下题解,发现有多种解法,我觉得Boyer-Moore 投票算法是最优解,看了官方对这个算法的解释,我是这样理解的,就是在一个数组中有一个众数的数量大于所有元素数量的一半,那么我们可以这样想,每次删除数组里的任意两个不同的数字,会发现到最后只剩下众数了,主要还是众数数量多,所以理解了就可以很容易写出下面的代码了,画了个草图如下
代码如下
class Solution {
public int majorityElement(int[] nums) {
int count = 0, currentNum = 0;
for (int num : nums) {
if (count == 0) {
currentNum = num;
count = 1;
} else {
if (num == currentNum) {
count++;
} else {
count--;
}
}
}
return currentNum;
}
}
题目链接:题单 - 力扣(LeetCode)全球极客挚爱的技术成长平台