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; }