寻找快速计算h指数的算法

cak*_*ter 14 sorting algorithm

http://en.wikipedia.org/wiki/H-index

这个维基页面是h-index的定义

基本上如果我有一个[0 3 4 7 8 9 10]的数组,我的h指数将是4,因为我有4个大于4的数字.如果我有5个,我的h指数将是5数字大于5,等等.给定一个大于或等于0的整数数组,有效计算h指数的方法是什么?

编辑:数组不一定排序

Тол*_*оля 12

在这里我实现O(N)与表格,这是简单和快速:

private static int GetHIndex(int[] m)
{
    int[] s = new int[m.Length + 1];
    for (int i = 0; i < m.Length; i++) s[Math.Min(m.Length, m[i])]++;

    int sum = 0;
    for (int i = s.Length - 1; i >= 0; i--)
    {
        sum += s[i];
        if (sum >= i)
            return i;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 没意见?没解释?算法可能会很好,但不要强迫读者盯着它,至少要分享核心思想. (3认同)
  • 这个算法是错误的,它应该是`if(sum == i)return i;`.但即便如此,它计算出有'i`数字比'i'更大**或相等**(根据链接是正确的,但不是提问者想知道的).另外如果在第二个`for`循环中没有匹配(因此返回`),则算法返回"0",这意味着有0个(或大于或等于)0的数字,这与(非空的)相矛盾)数组只包含大于或等于0的数字(至少如果你使用关系`> =`检查,因为它现在已经完成). (2认同)