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;
}
}
};
网友评论