一魚多吃 用二分搜尋法 計算h-index_Leetcode #275

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

這題的題目在這裡

題目敘述

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

要求我們計算h-index。

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

這一題算是前一題的類似題,但是多加了一個很強的條件,輸入陣列已排序。


測試範例

Example 1:

Input: citations = [0,1,3,5,6]
Output: 3
Explanation: [0,1,3,5,6] means the researcher has 5 papers in total and each of them had received 0, 1, 3, 5, 6 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, 5, 6]

Example 2:

Input: citations = [1,2,100]
Output: 2
有兩篇論文引用數大於等於2
分別是[2, 100]

約束條件

Constraints:

  • n == citations.length
  • 1 <= n <= 105
  • 0 <= citations[i] <= 1000
  • citations is sorted in ascending order.

演算法

除了前一題介紹使用的Counting sort框架的演算法;這題因為多給了一個比較強的條件,輸入陣列已經從小到大排序好。

利用這個性質: 在已經排序好的陣列裡面做搜尋,適合使用二分搜尋法

因此,就用h-index本身的定義做為目標值的條件判斷,用二分搜尋法去不斷逼近最大的h 值。

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


程式碼

class Solution:
 def hIndex(self, citations: List[int]) -> int:
  
  left, right = 0, len(citations)-1
  
  size = len(citations)
  
  while left <= right:
   
   mid = left + (right - left)//2
   
   the_number_of_larger_equal_to_current = size - mid
   h_index = citations[mid]
   
   
   if h_index < the_number_of_larger_equal_to_current:
    # current h index is too small, make it larger
    left = mid + 1
     
   elif h_index > the_number_of_larger_equal_to_current:
    # current h index is to large, make it smaller
    right = mid - 1
   
   else:
    # meet the definition of h-index
    return h_index
   
  return size - left

複雜度分析

時間複雜度:

O( log n ) 使用二分搜尋法去逼近目標值,每次可以排除一半的區間,最多耗費log(n)步可以找到h-index

空間複雜度:

O(1) 只有使用固定的臨時變數,所耗費的記憶體空間為常數級別O(1)


關鍵知識點

想到這個性質: 在已經排序好的陣列裡面做搜尋,適合使用二分搜尋法

因此,就用h-index本身的定義做為目標值的條件判斷,用二分搜尋法去不斷逼近最大的h 值。

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

記得和h-index系列題的第一題做個對照。


Reference:

[1] LeetCode - The World's Leading Online Programming Learning Platform

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給定一個2D 二維的矩陣,矩陣內的元素值代表對應的高度,要求我們找出相對最高點,也就是(大樓)高度大於N4 東、南、西、北 四個鄰居的索引值。 題目保證矩陣內相鄰的元素值都不相同,也又是相鄰的兩兩相比較,一定有一個比較高,有一個比較矮。
題目會給定一個陣列,陣列裡面的元素分布就像一座山峰。 最大值的左邊都是上坡段,最大值的右邊都是下坡段。 要求我們找出陣列裡面的絕對極大值(absolute max value)所在的陣列索引
題目會給定一個陣列,裡面有大有小,可以把數字的大小類比成高度 要求我們找出陣列裡面的相對極大值(relative max value)所在的陣列索引 也就是說當下這個元素,大於左邊鄰居的元素值,也大於右邊鄰居的元素值
這題的題目在這裡 題目會給定一個輸入整數x, 要求我們返回x的正整數平方根(取無條件捨去小數部分的正整數值)
題目會給我們一個排序好的矩陣matrix ,和一個目標值 target 要求我們在矩陣中尋找target,如果存在,返回True。 如果target 不存在,返回False 題目要求必須在O( log (m*n) )對數時間內完成 。
題目會給我們一個排序好的陣列,還有一個目標值target 要求我們在陣列中尋找target所在的索引位置。 如果target 不存在,返回-1 題目要求必須在O( log n )對數時間內完成 。
題目會給定一個2D 二維的矩陣,矩陣內的元素值代表對應的高度,要求我們找出相對最高點,也就是(大樓)高度大於N4 東、南、西、北 四個鄰居的索引值。 題目保證矩陣內相鄰的元素值都不相同,也又是相鄰的兩兩相比較,一定有一個比較高,有一個比較矮。
題目會給定一個陣列,陣列裡面的元素分布就像一座山峰。 最大值的左邊都是上坡段,最大值的右邊都是下坡段。 要求我們找出陣列裡面的絕對極大值(absolute max value)所在的陣列索引
題目會給定一個陣列,裡面有大有小,可以把數字的大小類比成高度 要求我們找出陣列裡面的相對極大值(relative max value)所在的陣列索引 也就是說當下這個元素,大於左邊鄰居的元素值,也大於右邊鄰居的元素值
這題的題目在這裡 題目會給定一個輸入整數x, 要求我們返回x的正整數平方根(取無條件捨去小數部分的正整數值)
題目會給我們一個排序好的矩陣matrix ,和一個目標值 target 要求我們在矩陣中尋找target,如果存在,返回True。 如果target 不存在,返回False 題目要求必須在O( log (m*n) )對數時間內完成 。
題目會給我們一個排序好的陣列,還有一個目標值target 要求我們在陣列中尋找target所在的索引位置。 如果target 不存在,返回-1 題目要求必須在O( log n )對數時間內完成 。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在上集觀察了00946的篩選指標跟排序方式的第一階段與第二階段,其中還留下「胃納量比率」這個題目還沒研究,這集就來研究看看這個專有名詞是什麼意思。 我覺得很常公開說明書都不會寫得太清楚,需要花時間研究一下,也許思考的未必正確,但可以當個推論參考。如果你也看不懂的話可以一起
Thumbnail
搜尋引擎,是世界上最大的圖書館。當你想借某一本書、提供書的「線索」,搜尋引擎會從好幾億本合適的書籍裡,在0.1秒之內,挑出最適合的10本。所以你必須思考怎麼讓圖書館優先推薦你的書?
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
最近實踐將學術閱讀流水線化,效率顯著提升。 其中已經有兩個動作實踐了50次以上,達到標準化。 動作一:將文獻內容轉為資訊塊 良品一標準 原料:閱讀材料的文本形式 成果物:資訊塊 動作二:將資訊塊匯集成話題索引筆記 (Keyword Index) 良品二 原料:帶著
Thumbnail
魔鬼藏在二分搜尋裡!輸出值代表的意含、題意產生的邊界條件,寫完模板才是挑戰的開始 Orz
Thumbnail
運用大數據文本分析,所得出來的結果,皆有科學論文實證。
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在上集觀察了00946的篩選指標跟排序方式的第一階段與第二階段,其中還留下「胃納量比率」這個題目還沒研究,這集就來研究看看這個專有名詞是什麼意思。 我覺得很常公開說明書都不會寫得太清楚,需要花時間研究一下,也許思考的未必正確,但可以當個推論參考。如果你也看不懂的話可以一起
Thumbnail
搜尋引擎,是世界上最大的圖書館。當你想借某一本書、提供書的「線索」,搜尋引擎會從好幾億本合適的書籍裡,在0.1秒之內,挑出最適合的10本。所以你必須思考怎麼讓圖書館優先推薦你的書?
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
最近實踐將學術閱讀流水線化,效率顯著提升。 其中已經有兩個動作實踐了50次以上,達到標準化。 動作一:將文獻內容轉為資訊塊 良品一標準 原料:閱讀材料的文本形式 成果物:資訊塊 動作二:將資訊塊匯集成話題索引筆記 (Keyword Index) 良品二 原料:帶著
Thumbnail
魔鬼藏在二分搜尋裡!輸出值代表的意含、題意產生的邊界條件,寫完模板才是挑戰的開始 Orz
Thumbnail
運用大數據文本分析,所得出來的結果,皆有科學論文實證。
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String