Sword39——数组中出现次数超过一半的数字
方法1——摩尔投票
- 思路:从前往后遍历,只需要选择当前数,当遍历到的数与之相同,即为其票数加1,否则即为反对票相当于票数减1,当票数归零时,选取下一个元素为投票角色,继续执行投票操作
- 特殊情况与临界分析:无
- 终止条件:无
- 步骤:
- 定义当前数字、对应票数
- foreach循环遍历元素
- 当票数归零时,则选择当前元素
- 判断当前数是否与投票的数字相同
- 相同,即票数加1
- 不同,即票数减1
- 返回投票数大于0的结果res
public int majorityElement(int[] nums) {
// 定义当前数字、对应票数
int res = 0, votes = 0;
// foreach循环遍历
for (int num : nums) {
// 当票数归零时,即选择该元素为新投票的数字
if (votes == 0) {
res = num;
}
// 判断当前数是否与投票数字相同,相同票数加1,不同票数减1
votes += (num == res ? 1 : -1);
}
// 返回结果
return res;
}