题目描述:
主要思路:
利用摩尔投票法,开始以为摩尔投票法只能选出大于一半的数字,看了题解之后才发现其实不然。
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
vector<int> ans;
int n=nums.size();
int element1=0,element2=0,vote1=0,vote2=0;
for(auto num:nums)
{
if(vote1>0&&num==element1)
vote1+=1;
else if(vote2>0&&num==element2)
vote2+=1;
else if(vote1==0)
{
vote1=1;
element1=num;
}
else if(vote2==0)
{
vote2=1;
element2=num;
}
else
{
vote1-=1;
vote2-=1;
}
}
int cnt1=0,cnt2=0;
for(auto num:nums)
{
if(vote1>0&&num==element1)
cnt1+=1;
if(vote2>0&&num==element2)
cnt2+=1;
}
if(vote1>0&&cnt1>n/3)
ans.push_back(element1);
if(vote2>0&&cnt2>n/3)
ans.push_back(element2);
return ans;
}
};