摩尔投票算法
遍历数组,如果当前元素等于候选人,则得票数+1,不同则-1。
举个简单的例子:
现在有一个数组为 1 2 3 3 2 3 1
遍历数组
当指针指向第一个元素时,候选人为:1,得票数为:1,
当指针指向第二个元素时,候选人为:1,得票数为:0,
当指针指向第三个元素时,候选人为:3,得票数为:1,
当指针指向第四个元素时,候选人为:3,得票数为:2,
当指针指向第五个元素时,候选人为:3,得票数为:1,
当指针指向第六个元素时,候选人为:3,得票数为:2,
当指针指向第七个元素时,候选人为:3,得票数为:1,
遍历结束,当前的候选人就是出现次数大于n/2的元素。
思路
利用摩尔投票算法
解题方法
定义候选人为数组的第一个元素,且投票数为1。从第二个元素循环遍历,如果当前元素和候选人一样则投票数+1,如果不一样且投票数大于零的时候投票数-1,如果不一样且投票数为零时,重置候选人为当前元素,投票数为1。
class Solution {
public int majorityElement(int[] nums) {
//定义候选人
int candidate = nums[0];
//定义投票数
int votes = 1;
for (int i = 1; i < nums.length; i++) {
if(nums[i] == candidate){
votes++;
continue;
}
if(nums[i] != candidate && votes == 0){
candidate = nums[i];
votes = 1;
}else{
votes--;
}
}
return candidate;
}
}