题目链接:
思路分析:这个题目可以使用哈希表来以空间换时间,我们设置一个数组v来统计每一个对应的影响因子的文章出现的数量,遍历一遍后,v[i]表示影响因子为i的文章的数量,为了满足h的定义,低影响因子的文章数量需要加上所有比其影响因子高的文章的数量,所以进行一轮从后向前的求和,计算完毕后,从后向前第一个满足条件的i就是对应的h。
算法分析:这里主要是用到了哈希表,以空间换时间,属于比较常考的一类问题,希望大家可以掌握。
参考代码:
class Solution {
public:
int hIndex(vector<int>& citations) {
vector<int>v(1001,0);//开辟一个数组,存储影响因子为i的文章的数量
int n=citations.size();
for(int i=0;i<n;++i){//遍历所有的论文
v[citations[i]]++;//将影响因子为i的论文增加到对应的位置
}
for(int i=1000;i>0;--i)//题目给出了h的区间,所以从最大值开始向前遍历
v[i-1]+=v[i];//低影响因子的文章需要累计上高影响因子的
for(int i=1000;i>=0;--i){//从大到小寻找合适的结果
if(v[i]>=i)//如果影响因子为i的文章数量大于i则满足条件返回答案
return i;
}
return 0;
}
};