H-Index

题目来源
计算作者的H指数,有h篇paper的引用不小于h,那么h指数就是h。
我想着排个序,然后从头往后遍历一下就可以了,代码如下:

class Solution {
public:
    int hIndex(vector& citations) {
        int n = citations.size();
        vector tmp(citations);
        sort(tmp.begin(), tmp.end());
        for (int i=0; i= n-i)
                return n-i;
        return 0;
    }
};

看了下讨论区,有O(N)的解法。感觉挺巧的,h最大的情况就是paper的篇数,一开始从前往后遍历一遍,记录下每种引用的个数,大于len的归为一类。然后再从后往前遍历,可以得到大于h的paper数目,然后就可以进行计算。
代码如下:

class Solution {
public:
    int hIndex(vector& citations) {
        int n = citations.size();
        vector nums(n+1, 0);
        for (int i=0; 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;
    }
};

你可能感兴趣的:(H-Index)