274. H 指数

给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。

根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且每篇论文 至少 被引用 h 次。如果 h 有多种可能的值,h 指数 是其中最大的那个。


复杂度:O(N)
思路:因为h最大值为n,所以可以讲引用量大于n的视为n,用数组cnts记录不同引用量出现的次数,逆序遍历数组,sum表示大于i的引用量的总数,当sum>=i时候,即为满足条件的答案。

class Solution {
    public int hIndex(int[] cs) {
        int n = cs.length;
        // 因为h最大为n
        int[] cnts = new int[n+1];
        for(int c:cs) {
            if(c>n) {
                cnts[n] ++;
            } else {
                cnts[c] ++;
            }
        }
        int sum = 0;
        for(int i=n; i>=0; i--) {
            sum = sum + cnts[i];
            if(sum>=i) {
                return i;
            }
        }
        return 0;
    }
}

你可能感兴趣的:(算法,数据结构,java)