题目来源
计算作者的H指数,有h篇paper的引用不小于h,那么h指数就是h。
我想着排个序,然后从头往后遍历一下就可以了,代码如下:
class Solution {
public:
int hIndex(vector<int>& citations) {
int n = citations.size();
vector<int> tmp(citations);
sort(tmp.begin(), tmp.end());
for (int i=0; i<n; i++)
if (tmp[i] >= n-i)
return n-i;
return 0;
}
};
看了下讨论区,有O(N)的解法。感觉挺巧的,h最大的情况就是paper的篇数,一开始从前往后遍历一遍,记录下每种引用的个数,大于len的归为一类。然后再从后往前遍历,可以得到大于h的paper数目,然后就可以进行计算。
代码如下:
class Solution {
public:
int hIndex(vector<int>& citations) {
int n = citations.size();
vector<int> nums(n+1, 0);
for (int i=0; i<n; i++)
if (citations[i] > n)
nums[n]++;
else
nums[citations[i]]++;
int sum = 0;
for (int i=n; i>=0; i--) {
sum += nums[i];
if (sum >= i)
return i;
}
return 0;
}
};