题目:
题解:
- 前言:是不是读完题目还是一脸懵逼?是的,这道题翻译的有问题,其实应该跟论文量有关,就是说输出的论文数要小于等于引用次数。
- 排序
- 思路:先将数组
排序
,然后数组长度 - 下标(n-i=h)
表示有h篇论文至少引用citation[i]次,剩下的n-h篇论文的引用数不多于citation[i]次(因为数组已排序),即[0,i-1]范围内的论文引用数小于等于citation[i]次,[i,n-1]范围内的论文引用数大于等于citation[i]次。那么只需要citation[i]>=h即可,也就表示h篇论文至少引用了citation[i]次,我们就找到答案了。
代码如下:
class Solution {
public:
int hIndex(vector<int>& citations) {
sort(citations.begin(),citations.end());
int n=citations.size();
//设h=n-i表示至多有h篇论文分别引用了至少citation[i]次,其余n-h篇论文的引用数不多于citation[i]次
for(int i=0;i<n;++i){
if(n-i<=citations[i])return n-i;
}
return 0;
}
};