Tips关于输出前K个数的问题

43次阅读

共计 689 个字符,预计需要花费 2 分钟才能阅读完成。

Leetcode-347
要求按出现频率进行排序:首先我们应该先统计好每个数字出现的次数,放进一个 Hash 表中。然后按照频率高低进行排序放进容器,最后输出容器中的前 K 个数。
因为优先队列的大根堆特性,把 Hash 表存进里面便可以完成自动排序,同理我们也可以把它放进 vector 中然后进行 sort 是一样的。
第一种方法:

vector<int> res;
unordered_map<int,int> mp;
priority_queue<pair<int,int>> pq;
for(auto e:nums){mp[e]++;
}
for(auto it:mp){pq.push(make_pair(it.second,it.first));
}
while(k--){res.push_back(pq.top().second);
    pq.pop();}
return res;

第二种方法:

vector<int> res;
unordered_map<int,int> mp;
vector<pair<int,int>> temp;
for(auto e:nums){mp[e]++;
}
for(auto it:mp){temp.push_back(make_pair(it.second,it.first));
}
sort(temp.begin(),temp.end(),comp);

for(int i = 0;i<k;++i){res.push_back(temp[i].second);
}
return res;

bool comp(pair<int,int> &a,pair<int,int> &b){return a.first>b.first;}

正文完
 0