「力扣」274. H 指數(第七天)

274. H 指數

題目

題目難度:中等
給定一位研究者論文被引用次數的數組(被引用次數是非負整數)。編寫一個方法,計算出研究者的 h 指數。

h 指數的定義:h 代表“高引用次數”(high citations),一名科研人員的 h 指數是指他(她)的 (N 篇論文中)總共有 h 篇論文分別被引用了至少 h 次。(其餘的 N - h 篇論文每篇被引用次數 不超過 h 次。)

例如:某人的 h 指數是 20,這表示他已發表的論文中,每篇被引用了至少 20 次的論文總共有 20 篇。

示例:

輸入:citations = [3,0,6,1,5]
輸出:3
解釋:給定數組表示研究者總共有 5 篇論文,每篇論文相應的被引用了 3, 0, 6, 1, 5 次。由於研究者有 3 篇論文每篇 至少 被引用了 3 次,其餘兩篇論文每篇被引用不多於3 次,所以她的h指數是 3。

解題

(1)首先看到h個元素大於等於某個值,N-h個元素小於等於某個值,這顯然是一個有序序列的特徵,所以自然而然的想到先將數組排序;
示例:[3,0,6,1,5]->[0,1,3,5,6]

(2) 逆序枚舉比較容易理解

  • 當h=5,說明至少要有5篇論文被引用>=5次。那麼要滿足的話,第一篇論文的引用次數就要>=5次
  • 當h=4,說明至少要有4篇論文被引用>=4次。說明至少要有4篇論文被引用>=4次。那麼要滿足的話,第二篇論文的引用次數就要>=4次
  • 同理…h=3,h=2,h=1…
class Solution {
    public int hIndex(int[] citations) {
        int n = citations.length;
        //排序
        Arrays.sort(citations);
        //當h=5,就說明第一篇論文的引用次數應該大於等於5
        //若不大於5,則嘗試h=4,那麼就第二篇論文引用次數大於等於4
        for(int i = n; i > 0 ; i--){
            if(citations[n-i] >= i ){
                return i;
            }
        }
        return 0;
    }
}

「力扣」217. 存在重複元素(第八天)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章