↓快轉到主要內容
  1. LeetCode/

LeetCode 414: Third Maximum Number

·1 分鐘· ·
LeetCode Easy Array Sorting
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-24

  • 提交紀錄:Accepted(一次通過)

解題思路
#

題目要的是不同的第三大。掃一次維護 first > second > third,遇到已經在裡面的值就跳過,比 first 大就整個往下推一格(Greedy 模板一)。不到三個不同的值時回傳最大值。O(n),不用排序。

我的嘗試
#

一次 AC,當時是 sorted(set(nums))[-3],不到三個時用 try/except 回傳 max(nums),O(n log n)。

正確解法
#

class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        top = []
        for x in nums:
            if x in top:
                continue
            top.append(x)
            top.sort(reverse=True)
            if len(top) > 3:
                top.pop()
        return top[2] if len(top) == 3 else top[0]

複雜度
#

時間 O(n),空間 O(1)(top 最多 4 個)。

要特別避免的錯誤
#

  • 是不同的數的第三大,重複的不算。

面試口說整理
#

我維護最多三個不同的最大值,重複的跳過,每次加入後排序並保留最大的三個,最後有三個就回傳第三個,否則回傳最大值。時間 O(n)。

相關文章

LeetCode 455: Assign Cookies
·1 分鐘
LeetCode Easy Array Two-Pointers Greedy Sorting
LeetCode 455 解題筆記:小孩和餅乾都排序,用最小的、夠大的餅乾滿足最小的小孩;兩個指標各走一次
LeetCode 217: Contains Duplicate
·1 分鐘
LeetCode Easy Array Hash-Table Sorting
LeetCode 217 解題筆記:轉成 set 後長度變短就代表有重複
LeetCode 169: Majority Element
·1 分鐘
LeetCode Easy Array Hash-Table Divide-and-Conquer Sorting
LeetCode 169 解題筆記:Boyer-Moore 投票,不同的數兩兩抵消,最後留下的就是出現超過一半的那個
LeetCode 448: Find All Numbers Disappeared in an Array
·1 分鐘
LeetCode Easy Array Hash-Table
LeetCode 448 解題筆記:把陣列本身當雜湊表,看到 x 就把 nums[x - 1] 標成負數,最後還是正數的位置就是沒出現的數
LeetCode 463: Island Perimeter
·1 分鐘
LeetCode Easy Array Depth-First-Search Breadth-First-Search Matrix
LeetCode 463 解題筆記:每格陸地貢獻 4 條邊,每跟上方或左方的陸地相鄰一次就少 2 條
LeetCode 495: Teemo Attacking
·1 分鐘
LeetCode Easy Array Simulation
LeetCode 495 解題筆記:每次攻擊貢獻 min(到下一次攻擊的間隔, duration),最後一次貢獻完整的 duration