274. H-Index论文引用量

[抄题]:

Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher's h-index.

According to the definition of h-index on Wikipedia: "A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each."

Example:

Input: citations = [3,0,6,1,5]
Output: 3 
Explanation: [3,0,6,1,5] means the researcher has 5 papers in total and each of them had 
             received 3, 0, 6, 1, 5 citations respectively. 
             Since the researcher has 3 papers with at least 3 citations each and the remaining 
             two with no more than 3 citations each, his h-index is 3.

Note: If there are several possible values for h, the maximum one is taken as the h-index.

 [暴力解法]:

时间分析:

空间分析:

 [优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

[思维问题]:

以为n篇文章的引用量,有什么相互关系:并没有

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 累加数组元素的时候最好用一个新的sum 变量,也不占空间。加到数组元素上容易出现范围错误。

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

[复杂度]:Time complexity: O(就是n) Space complexity: O(n)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

这题比较特殊,数组元素 = 个数

计数排序(Counting sort)是一种稳定的线性时间排序算法。
计数排序使用一个额外的数组 {\displaystyle C}  C ,其中第i个元素是待排序数组 {\displaystyle A} A中值等于 {\displaystyle i} i的元素的个数。
然后根据数组 {\displaystyle C}  C 来将 {\displaystyle A} A中的元素排到正确的位置。

[算法思想:递归/分治/贪心]:

[关键模板化代码]:

//for loop : add to bucket
        for (int c : citations) {
            if (c > n) bucket[n]++;
            else bucket[c]++;
        }

[其他解法]:

[Follow Up]:

排序后:

[LC给出的题目变变变]:

 [代码风格] :

class Solution {
    public int hIndex(int[] citations) {
        //cc
        if (citations == null || citations.length == 0) return 0;
        
        //ini: bucket[n + 1] form exception
        int n = citations.length;
        int[] bucket = new int[n + 1];
        
        //for loop : add to bucket
        for (int c : citations) {
            if (c > n) bucket[n]++;
            else bucket[c]++;
        }
        
        //count from back
        int count = 0;
        for (int i = n; i >= 0; i--) {
            count += bucket[i];
            if (count >= i) return i;
        }
        
        return 0;
    }
}
View Code

猜你喜欢

转载自www.cnblogs.com/immiao0319/p/9023374.html
今日推荐