力扣-229题 求众数 II(C++)- 摩尔投票法+有价值
题目链接:https://leetcode-cn.com/problems/majority-element-ii/
题目如下:
思路:
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
vector<int> result;
int candidate1=-1,candidate2=-1;
int count1=0,count2=0;
for(auto num:nums){
if(count1>0&&num==candidate1) count1++;//如果该元素为第一个元素,则+1
else if(count2>0&&num==candidate2) count2++;//如果该元素是第二个元素,则+1
else if(count1==0) {
candidate1=num;count1++;}//第一个元素需要换人
else if(count2==0) {
candidate2=num;count2++;}//第二个元素需要换人
else {
count1--;count2--;}//如果三个元素均不相同,则互相抵消1次
}
//记录两个有票的候选人分别有多少人投它
int cnt1=0,cnt2=0;
for(auto num:nums){
if(count1>0&&num==candidate1) cnt1++;
if(count2>0&&num==candidate2) cnt2++;
}
//判断出现的次数是否满足题意要求
if(count1>0&&cnt1>nums.size()/3) result.push_back(candidate1);
if(count2>0&&cnt2>nums.size()/3) result.push_back(candidate2);
return result;
}
};
还没有评论,来说两句吧...