陣列應用題 計算h-index_Leetcode #274

更新於 發佈於 閱讀時間約 4 分鐘
raw-image

這題的題目在這裡

題目敘述

題目給定一個輸入陣列,陣列裡面的數字自分別代表每篇論文的被引用數。

要求我們計算h-index。

h-index的定義:
找一個最大的h值,使得有h篇論文,個別論文的被引用數都 大於等於 h


測試範例

Example 1:

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, their h-index is 3.
有三篇論文​,引用數都大於等於3
分別是[3, 6, 5] 這三篇​

Example 2:

Input: citations = [1,3,1]
Output: 1
有一篇論文​,引用數都大於等於1
任選一篇都 >= 1

約束條件

  • n == citations.length
  • 1 <= n <= 5000
  • 0 <= citations[i] <= 1000

演算法

除了傳統的O( n log n) 的排序演算法的解法以外。

還有O(n) Counting-based的計數排序法的解法。

把被引用數視為一個桶子,每當掃描過一篇論文,就把那篇論文對應到的被引用數累加一。

最後從高引用數掃描到低引用數,累積論文數量,如果當下累積論文數量已經大於等於被引用數,符合定義,則該引用數就是我們的h指標,也就是h index。

註:
實作上有一個空間優化的技巧,因為h index最大值 = 總論文篇數 = n,所以桶子的上邊界設在 總論文篇數 n 即可。


程式碼

class Solution:
 def hIndex(self, citations: List[int]) -> int:

  n = len(citations)

  # key: citation
  # value: counting of papaers with specific citations
  counting_of = [ 0 for _ in range(n+1) ]

  # Update counting_of table
  for citation in citations:

   if citation >= n:
    # H index is up to n at most
    counting_of[n] += 1
   else:
    counting_of[citation] += 1

  # Compute h index
  # The given researcher has published at least h papers that have each been cited at least h times.
  couting_of_at_least_h = 0

  for citation in range(n,-1,-1):

   couting_of_at_least_h += counting_of[citation]

   if couting_of_at_least_h >= citation:
    return citation
  
  return 0



複雜度分析

時間複雜度:

O( n ) 每個論文掃描一次,引用數也掃描一次,皆為O(n)

空間複雜度:

O(n) h index 最大值頂多和論文總篇數相等,所以counting_of 佔用空間為O(n)


關鍵知識點

由定義出發,想到被引用數可以和Counting sort演算法模板結合。從高引用數掃描到低引用數,累積論文數量,如果當下累積論文數量已經大於等於被引用數,符合定義,則該引用數就是我們的h指標,也就是h index。


Reference:

[1] Python sol by sorting. [w/ Comment] - H-Index - LeetCode

avatar-img
92會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給定兩個參數,一個是底數x,一個是次方n。要求我們計算出x^n。 要求實作myPow(self, x: float, n: int) -> float 函數的內部邏輯。 也就是說,不可以呼叫程式語言內建計算指數的library
1. 競賽題 或者 面試題 Medium Hard 以上題目,一開始在第一時間想不出解題思路,或者最佳解是很平常的事情。 通過官方解答、討論區的高手分享解題,進而學到新的解題思路,或者更泛用的演算法框架,就是最大的收穫。 2. 但是Easy分類的題目,通常就是該領域最基礎的題目,應該要
題目會給定我們一個陣列,要求我們找出裡面出現次數最多的數字。 出現次數最多的數字也就是我們在統計上所謂的 眾數 mode
題目會給一個輸入陣列,裡面的數字分別代表每個index對應到的高度,要求我們計算山峰與低谷的數目,總共有多少個。 山峰 Hill: 比最靠近高度不相同的兩個鄰居的高度還要高。 低谷 Valley:比最靠近高度不相同的兩個鄰居的高度還要低。
題目會給一個輸入陣列,要求我們判斷所有的數字是否構成一組單調數列。 也就是全部的數字構成一條單調遞增數列(逐漸變大), 或者一條單調遞減數列(逐漸變小)?
題目會給我們一個陣列,分別代表高低各不同的隔板高度,問我們從降雨之後,最多可以儲存多少水量?
題目會給定兩個參數,一個是底數x,一個是次方n。要求我們計算出x^n。 要求實作myPow(self, x: float, n: int) -> float 函數的內部邏輯。 也就是說,不可以呼叫程式語言內建計算指數的library
1. 競賽題 或者 面試題 Medium Hard 以上題目,一開始在第一時間想不出解題思路,或者最佳解是很平常的事情。 通過官方解答、討論區的高手分享解題,進而學到新的解題思路,或者更泛用的演算法框架,就是最大的收穫。 2. 但是Easy分類的題目,通常就是該領域最基礎的題目,應該要
題目會給定我們一個陣列,要求我們找出裡面出現次數最多的數字。 出現次數最多的數字也就是我們在統計上所謂的 眾數 mode
題目會給一個輸入陣列,裡面的數字分別代表每個index對應到的高度,要求我們計算山峰與低谷的數目,總共有多少個。 山峰 Hill: 比最靠近高度不相同的兩個鄰居的高度還要高。 低谷 Valley:比最靠近高度不相同的兩個鄰居的高度還要低。
題目會給一個輸入陣列,要求我們判斷所有的數字是否構成一組單調數列。 也就是全部的數字構成一條單調遞增數列(逐漸變大), 或者一條單調遞減數列(逐漸變小)?
題目會給我們一個陣列,分別代表高低各不同的隔板高度,問我們從降雨之後,最多可以儲存多少水量?
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
Thumbnail
高中數學主題練習—平面向量內積計算 解答:
最近實踐將學術閱讀流水線化,效率顯著提升。 其中已經有兩個動作實踐了50次以上,達到標準化。 動作一:將文獻內容轉為資訊塊 良品一標準 原料:閱讀材料的文本形式 成果物:資訊塊 動作二:將資訊塊匯集成話題索引筆記 (Keyword Index) 良品二 原料:帶著
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
這是「按條件算OO」系列文的第二篇教學!今天會來聊聊 COUNTIF、COUNTIFS 和 COUNTUNIQUEIFS。
Thumbnail
運用大數據文本分析,所得出來的結果,皆有科學論文實證。
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
Thumbnail
高中數學主題練習—平面向量內積計算 解答:
最近實踐將學術閱讀流水線化,效率顯著提升。 其中已經有兩個動作實踐了50次以上,達到標準化。 動作一:將文獻內容轉為資訊塊 良品一標準 原料:閱讀材料的文本形式 成果物:資訊塊 動作二:將資訊塊匯集成話題索引筆記 (Keyword Index) 良品二 原料:帶著
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
這是「按條件算OO」系列文的第二篇教學!今天會來聊聊 COUNTIF、COUNTIFS 和 COUNTUNIQUEIFS。
Thumbnail
運用大數據文本分析,所得出來的結果,皆有科學論文實證。
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String