1. 程式人生 > >【LeetCode 簡單題】93-第三大的數

【LeetCode 簡單題】93-第三大的數

宣告:

今天是第93道題。給定一個非空陣列,返回此陣列中第三大的數。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定一個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是O(n)。

示例 1:

輸入: [3, 2, 1]

輸出: 1

解釋: 第三大的數是 1

示例 2:

輸入: [1, 2]

輸出: 2

解釋: 第三大的數不存在, 所以返回最大的數 2 

示例 3:

輸入: [2, 2, 3, 1]

輸出: 1

解釋: 注意,要求返回第三大的數,是指第三大且唯一出現的數,存在兩個值為2的數,它們都排第二

解法1。考慮到時間複雜度,說明最多用1個for迴圈遍歷陣列找到前三個大的值,可以設定1個數組動態更新大小排前三的值,程式碼如下。

執行用時: 48 ms, 在Third Maximum Number的Python3提交中擊敗了83.77% 的使用者

  • float("inf"):表示正無窮
  • float("-inf"):表示負無窮
class Solution:
    def thirdMax(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = [float("-inf")] * 3
        for i in nums:
            if i in res:
                continue
            if i > res[0]:
                res = [i,res[0],res[1]] 
            elif i > res[1]:
                res = [res[0],i,res[1]]    # 注意這裡一定要用elif不能用if以保證只執行一次更新,且這裡面一定只保留res[0]和res[1],res[2]肯定是被踢掉的那個
            elif i > res[2]:
                res = [res[0],res[1],i]
        return res[-1] if res[2] != float("-inf") else res[0]

結尾

解法1:https://blog.csdn.net/qq_34364995/article/details/80786989​​​​​​​