找到H指数背后的直觉

时间:2017-07-19 20:33:11

标签: java algorithm

我在LeetCode上找到了以下代码片段,可以有效地找到研究人员的h索引。维基百科将h-index定义为“如果他/她的N篇论文中每篇论文至少引用h,那么科学家就有索引h,而其他N-h论文每篇论文的引用次数不超过h。”

public class Solution {
    // 9.3 70 years diaoZhaTian China jiaYou 
    public int hIndex(int[] citations) {
        int length = citations.length;
        if (length == 0) {
            return 0;
        }

        int[] array2 = new int[length + 1];
        for (int i = 0; i < length; i++) {
            if (citations[i] > length) {
                array2[length] += 1;
            } else {
                array2[citations[i]] += 1;
            }
        }
        int t = 0;
        int result = 0;

        for (int i = length; i >= 0; i--) {
            t = t + array2[i];
            if (t >= i) {
                return i;
            }
        }
        return 0;
    }
}

虽然我理解第一个for循环的目的(计算各种引用的频率),但第二个循环背后的直觉究竟是什么?当累积和(h-index)变得大于或等于索引时,索引如何t

1 个答案:

答案 0 :(得分:0)

请注意,第二个循环倒计时,而不是向上 - 所以累积总和是&#34;至少i引用的论文数量&#34 ;;因此,循环找到最大值i,其中论文数量大于引用次数 - 这正是h指数的定义。