H-Index

题目来源
计算作者的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;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容