求众数(摩尔投票法)
求众数II
思路:摩尔投票法
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
vector<int> res;
if(nums.empty())
return{};
int first_candidate=nums[0],first_candidate_counter=0;
int second_candidate=nums[0],second_candidate_counter=0;
for(int num:nums)
{
if(num==first_candidate)
first_candidate_counter++;
if(num==second_candidate)
second_candidate_counter++;
if(num!=first_candidate&&num!=second_candidate)
{
if(first_candidate==second_candidate)
{
second_candidate=num;
second_candidate_counter=1;
}
else
{
if(second_candidate_counter-1<0||first_candidate_counter-1<0)
{
if(second_candidate_counter-1<0&&first_candidate_counter-1<0)
{
second_candidate=first_candidate=num;
second_candidate_counter=first_candidate_counter=1;
}
else if(second_candidate_counter-1<0)
{
second_candidate_counter=1;
second_candidate=num;
}
else
{
first_candidate_counter=1;
first_candidate=num;
}
}
else
{
first_candidate_counter--;
second_candidate_counter--;
}
}
}
}
first_candidate_counter=0;
second_candidate_counter=0;
for(int num:nums)
{
if(num==first_candidate)
first_candidate_counter++;
if(num==second_candidate)
second_candidate_counter++;
}
if(3*first_candidate_counter>nums.size())
res.push_back(first_candidate);
if(3*second_candidate_counter>nums.size())
res.push_back(second_candidate);
if(first_candidate==second_candidate&&!res.empty())
res.pop_back();
return res;
}
};
class Solution {
public:
int majorityElement(vector<int>& nums) {
int candidate,candidate_counter=0;
for(int num:nums)
{
if(candidate_counter==0)
{
candidate=num;
candidate_counter=1;
}
else
{
if(candidate==num)
candidate_counter++;
else
candidate_counter--;
}
}
return candidate;
}
};

浙公网安备 33010602011771号