【LeetCode 簡單題】93-第三大的數
阿新 • • 發佈:2018-11-19
宣告:
今天是第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