1. 程式人生 > >LeetCode刷題 (Python) | 274. H-Index

LeetCode刷題 (Python) | 274. H-Index

題目連結

心得

挺有意思的題目,算H因子。

首先抽象出H因子的定義,在陣列中找到一個數字H,使得陣列中至少有H個數字大於等於H,其餘的數學小於等於H。

分析題目中給的例子 [3,0,6,1,5]。很明顯H的取值範圍是0到5。最暴力的方法就是逐一判斷是否滿足。那麼對於任意一個可能的值,都要遍歷一遍陣列來判斷是否滿足H的條件。所以時間複雜度是O(n2)

如果陣列是有序陣列呢?那麼對於任意一個可能的值,用O(1)時間就可以判斷這個值是否滿足H的定義。所以先對陣列進行排序,再逐一判斷,那麼總的時間複雜度就可以降到O(nlogn)

AC程式碼

class Solution(object)
:
def hIndex(self, citations): """ :type citations: List[int] :rtype: int """ citations.sort(reverse=False) h = len(citations) index = 0 while index < len(citations): if citations[index] >= h: return
h index += 1 h -= 1 return 0 if __name__ == '__main__': s = Solution() print(s.hIndex([3, 0, 6, 1, 5]))

相關推薦

LeetCode (Python) | 274. H-Index

題目連結 心得 挺有意思的題目,算H因子。 首先抽象出H因子的定義,在陣列中找到一個數字H,使得陣列中至少有H個數字大於等於H,其餘的數學小於等於H。 分析題目中給的例子 [3,0,6,1,5]。很明顯H的取值範圍是0到5。最暴力的方法就是逐一判

Leetcodepython(3)

各位相加 #題目 給定一個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。 示例: 輸入: 38 輸出: 2 解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由於 2 是一位數,所以返回 2。 進階: 你可以不使用迴圈或者遞

python leetcode 274. H-Index

class Solution: def hIndex(self, citations): """ :type citations: List[int] :rtype: int """ citations.

Leetcode記錄[python]——561 Array Partition I

partition span example ive 記錄 lan all [] result 一、前言 二、題561 Array Partition I Given an array of 2n integers, your task is to group the

[LeetCode] 274. H-Index H指數

rec leetcode arrays tps put style example break 引用 Given an array of citations (each citation is a non-negative integer) of a researcher,

Leetcode筆記python---二進位制求和

二進位制求和 題目 給定兩個二進位制字串,返回他們的和(用二進位制表示)。 輸入為非空字串且只包含數字 1 和 0。 示例 1: 輸入: a = “11”, b = “1” 輸出: “100” 示例 2: 輸入: a = “1010”, b = “1011” 輸出:

Leetcode筆記python---相對名次

相對名次 題目 給出 N 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 “金牌”,“銀牌” 和“ 銅牌”(“Gold Medal”, “Silver Medal”, “Bronze Medal”)。 (注:分數越高的選手,排名越靠前。)

Leetcode筆記python---贖金信

贖金信 題目 給定一個贖金信 (ransom) 字串和一個雜誌(magazine)字串,判斷第一個字串ransom能不能由第二個字串magazines裡面的字元構成。如果可以構成,返回 true ;否則返回 false。 (題目說明:為了不暴露贖金信字跡,要從雜誌上搜索各個需要的

Leetcode筆記python---4的冪

4的冪 題目 給定一個整數 (32 位有符號整數),請編寫一個函式來判斷它是否是 4 的冪次方。 示例 1: 輸入: 16 輸出: true 示例 2: 輸入: 5 輸出: false 解答 思路: while 比較 程式碼:

Leetcode筆記python---位1的個數

位1的個數 題目 編寫一個函式,輸入是一個無符號整數,返回其二進位制表示式中數字位數為 ‘1’ 的個數(也被稱為漢明重量)。 示例 : 輸入: 11 輸出: 3 解釋: 整數 11 的二進位制表示為 00000000000000000000000000001011 示例

Leetcode筆記python---買賣股票的最佳時機

買賣股票的最佳時機 題目 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。 注意你不能在買入股票前賣出股票。 示例 1: 輸入: [7,1,5,3,6,4

python Leetcode小記【No.1 兩數之和】

Leetcode 1 題目描述: 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + n

Leetcode筆記python唯一摩爾斯密碼詞

唯一摩爾斯密碼詞 #題目 國際摩爾斯密碼定義一種標準編碼方式,將每個字母對應於一個由一系列點和短線組成的字串, 比如: “a” 對應 “.-”, “b” 對應 “-…”, “c” 對應 “-.-.”, 等等。 為了方便,所有26個英文字母對應摩爾斯密碼錶如下:

Leetcode筆記python-----反轉字串中的單詞3

反轉字串中的單詞3 題目 給定一個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。 示例 1: 輸入: “Let’s take LeetCode contest” 輸出: “s’teL ekat edoCteeL tsetnoc” 注

Leetcode筆記python------寫字串需要的行數

寫字串需要的行數 題目 我們要把給定的字串 S 從左到右寫到每一行上,每一行的最大寬度為100個單位,如果我們在寫某個字母的時候會使這行超過了100 個單位,那麼我們應該把這個字母寫到下一行。我們給定了一個數組 widths ,這個陣列 widths[0] 代

Leetcode筆記python-----分糖果

分糖果 題目 給定一個偶數長度的陣列,其中不同的數字代表著不同種類的糖果,每一個數字代表一個糖果。你需要把這些糖果平均分給一個弟弟和一個妹妹。返回妹妹可以獲得的最大糖果的種類數。 示例 1: 輸入: candies = [1,1,2,2,3,3] 輸出: 3 解

Leetcode筆記python-----下一個更大的元素1

下一個更大的元素 題目 給定兩個沒有重複元素的陣列 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下一個比其大的值。 nums1 中數字 x 的下一個更大元素是指 x 在 nums2 中對應

Leetcode筆記python----只出現一次的數字

只出現一次的數字 題目 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。 說明: 你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1: 輸入: [2,2,1] 輸出: 1 示例 2:

Leetcode筆記python----棒球比賽

棒球比賽 題目 你現在是棒球比賽記錄員。 給定一個字串列表,每個字串可以是以下四種類型之一: 1.整數(一輪的得分):直接表示您在本輪中獲得的積分數。 2. “+”(一輪的得分):表示本輪獲得的得分是前兩輪有效 回合得分的總和。 3. “D”(一輪的得分):表示

Leetcode筆記python----求眾數

求眾數 題目 給定一個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ n/2 ⌋ 的元素。 你可以假設陣列是非空的,並且給定的陣列總是存在眾數。 示例 1: 輸入: [3,2,3] 輸出: 3 示例 2: 輸入: [2,2,1,1,1,2,