https://leetcode-cn.com/problems/h-index/
哈希表+排序,利用向量将哈希表中的项,根据第一个值进行从大到小排序,将被引用量多的文章放在前面,然后通过哈希表取被引量为key值的文章数目value,取一篇则ret自加一次,哈希表对应项的值减一,直到被引次数大于等于ret的数目。
bool cmp(pair<int,int> a,pair<int,int> b)
{
return a.first>b.first;//根据pair的第一项进行排序
}
class Solution {
public:
int hIndex(vector<int>& citations) {
int ret = 0;
unordered_map<int,int> mp;//哈希表
vector<pair<int,int>> v;//向量
for(auto &citation:citations)
{
mp[citation]++;//key值为citation的项的value自加1
}
for(auto iter=mp.begin();iter!=mp.end();iter++)
{
v.push_back(*iter);//将对应的pair对放入v中,v中的每一项结构与哈希表中的每一项结构相同
}
sort(v.begin(),v.end(),cmp);//根据被引量从大到小排序
for(auto iter=v.begin();iter!=v.end();iter++)
{
while(iter->first>ret&&mp[iter->first]!=0){//被引量大于ret并且被引量为iter->first的文章数目大于0,就把它的value值自减1,并且把ret自加,表示h指数至少满足这个ret值
mp[iter->first]--;
ret++;
}
if(iter->first<=ret) break;//被引量小于等于h值就结束
}
return ret;
}
};