多数元素00
作者:互联网
题目链接
题目描述
注意
- 多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素
- 数组是非空的
- 给定的数组总是存在多数元素
解答思路
- 使用摩尔投票法找到多数元素
代码
class Solution {
public int majorityElement(int[] nums) {
// 初始候选人为数组中的第一个数,初始票数为1
int cand_num = nums[0];
int count = 1;
for (int i = 1; i < nums.length; ++i) {
if (cand_num == nums[i]){
// 如果当前元素与候选人相同,则票数 + 1
count++;
}
else if (count == 0) {
// 如果此时票数为0且当前元素与候选人不同,则更换候选人,改变票数为1
cand_num = nums[i];
count = 1;
}
else{
// 当前元素与候选人不同,则票数 - 1
count--;
}
}
return cand_num;
}
}
关键点
- 理解摩尔元素法的思想,初始化候选人nums[0]和票数1,遍历整个数组,每出现一个与候选人相同的元素票数就+1,否则票数-1,当票数小于0,则需要更换候选人为当前元素,同时重置票数为1
- 多数元素的数量大于n / 2,所以众数的票数减去其他元素的票数的结果肯定大于0,最终候选人肯定就是众数,所以摩尔元素法可以找到多数元素
标签:count,00,nums,int,票数,元素,多数,候选人 来源: https://blog.csdn.net/weixin_51628158/article/details/120205107