Leetcode 169/229多数元素/摩尔投票法

Leetcode 169/229多数元素/摩尔投票法_第1张图片

摩尔投票法,这样操作,最后一定会变到出现超过n/2的元素

class Solution {
public:
    int majorityElement(vector& nums) {
        int r, c = 0;
        for(auto num:nums){
            if(c==0) r=num, c++;
            else if(r!=num) c--;
            else if(r==num) c++;
        }
        return r;
    }
};

Leetcode 169/229多数元素/摩尔投票法_第2张图片

摩尔投票法升级版本,同时选两人

class Solution {
public:
    vector majorityElement(vector& nums) {
        int r1,r2,c1=0,c2=0;
        for(auto num:nums){
            if(c1>0&&num==r1) c1++;
            else if(c2>0&&num==r2) c2++;
            else if(c1==0) c1++, r1 = num;
            else if(c2==0) c2++, r2 = num;
            else c1--, c2--;
        }
        vector res;
        c1 = 0, c2 = 0;
        for(auto num:nums){
            if(num==r1) c1++;
            else if(num==r2) c2++;
        }
        if(c1>nums.size()/3) res.push_back(r1);
        if(c2>nums.size()/3) res.push_back(r2);
        return res;
    }
};

 

你可能感兴趣的:(算法)