这是道简单题,只想到了暴力解法,就是用集合存储起来,然后找出其中的众数,看了一下题解,发现有多种解法,我觉得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)全球极客挚爱的技术成长平台