274. H-Index

1、題目數組

  一、審題函數

  

  二、分析spa

     給定一個數組,記載了某研究人員的文章引用次數(每篇文章的引用次數都是非負整數),編寫函數計算該研究人員的h指數。code

     根據維基百科上對h指數的定義:「一名科學家的h指數是指在其發表的N篇論文中,有h篇論文分別被引用了至少h次,其他N-h篇的引用次數均不超過h次」。blog

     例如,給定一個數組citations = [3, 0, 6, 1, 5],這意味着該研究人員總共有5篇論文,每篇分別得到了3, 0, 6, 1, 5次引用。因爲研究人員有3篇論文分別至少得到了3次引用,其他兩篇的引用次數均不超過3次,於是其h指數是3。ci

      注意:若是存在多個可能的h值,取最大值做爲h指數。it

     經過下圖,能夠更直觀瞭解h值的定義,對應圖中,便是球左下角正方形的最大值:io

 

2、解答class

  一、思路遍歷

     開闢一個新數組 arr,用於記錄0~N次引用次數的各有幾篇文章(引用次數大於N的按照N次計算)遍歷數組,統計事後,遍歷一次統計數組 arr,便可算出h值的最大值。時間複雜度爲O(n)

     最終返回的是 count >= i 時的最大值 i 。

    // 返回的 n,其中引用數 > n 的論文數要 >= n
    public int hIndex(int[] citations) {
        int len = citations.length;
        if(len == 0)
            return 0;
        
        int[] arr = new int[len + 1];
        for (int i = 0; i < len; i++) {
            if(citations[i] >= len)
                arr[len]++;
            else
                arr[citations[i]]++;
        }
        
        int t = 0;
        for(int i = len; i >= 0; i--) {
            t += arr[i];
            if(t >= i)
                return i;
        }
        
        return 0;
    }
相關文章
相關標籤/搜索