摩尔投票法
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
1.思路分析:
1.初始化res为数组的第一个元素
2.定义标志flag用来判断是否出现重复元素
3.遍历判断数组中的元素进行投票
例如:
res=1 num=1 flag=1
res=1 num=2 flag=0
res=3 num=3 flag=1
…
* 不同元素抵消即可使得flag=0
2.代码详解:
class Solution {
public int majorityElement(int[] nums) {
int res=nums[0];
int flag=0;
for(int num:nums){
if(flag==0) res=num;
flag+=num==res?1:-1;
}
return res;
}
}