找出数组中出现次数大于N/K的所有元素

2019-07-31  本文已影响0人  徐振杰

leetcode 的求众数1 和 求众数2,然后我们可以把它泛化到K

class Solution {
public:
    vector<int> majorityElement(vector<int>& nums) {
        unordered_map<int,int> um;
        int k = 3;
        for(auto num:nums){
            if(um.count(num)){
                um[num] ++;
            }
            else{
                
                if(um.size() == k-1){
                    minusOne(um);
                }else{
                    um[num] ++;
                }//cout << num<< endl;
            }
        }
        
        for(auto& u:um){
            u.second = 0;
        }
        vector<int> res;
        for(auto num:nums){
            if(um.count(num)){
                um[num]++;
                if(um[num] > nums.size()/k){
                    res.push_back(num);
                    um.erase(num);
                }
            }
        }
        return res;
        
    }
    void minusOne(unordered_map<int,int>& um){
        for(auto it = um.begin();it!=um.end();){
            (*it).second--;
            if((*it).second == 0)
                it = um.erase(it);
            else
                it++;//cout<<"-----"<< endl;
        }
    }
};
上一篇 下一篇

猜你喜欢

热点阅读