数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
解题思路
摩尔投票, 先假定一个众数, 然后遍历数组, 遇到众数票数+1, 非众数票数-1
票数为0时更换众数为刚好遍历的数字, 最后被选上的数一定出现次数过半
代码
class Solution {
public int majorityElement(int[] nums) {
int mode = nums[0]; // 众数
int vote = 0;
for (int num : nums) {
if (vote == 0) {
mode = num;
}
vote += mode == num ? 1 : -1;
}
return mode;
}
}