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

LeetCode 495: Teemo Attacking

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

基本資料
#

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

  • 提交紀錄:Runtime Error → Wrong Answer ×2 → Accepted ×3

解題思路
#

中毒時間會被下一次攻擊重設。第 i 次攻擊實際的效果是 min(t[i + 1] - t[i], duration):間隔比 duration 長就是完整的 duration,比較短就只到下一次攻擊為止。最後一次攻擊沒有被打斷,貢獻完整的 duration(Array 模板五)。

我的嘗試
#

第一版 range(len(timeSeries)) 存取 i + 1 超出範圍。第二版兩個分支寫反了:間隔比 duration 長時加的是間隔,應該加 duration:[2, 7]、duration = 0 回傳 5,答案 0。改成算重疊的部分扣掉才 AC。

正確解法
#

class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        total = duration
        for i in range(len(timeSeries) - 1):
            total += min(timeSeries[i + 1] - timeSeries[i], duration)
        return total

複雜度
#

時間 O(n),空間 O(1)。

要特別避免的錯誤
#

  • 取的是間隔和 duration 的較小值;間隔比較大時效果是 duration,不是間隔。
  • 最後一次攻擊要另外加上 duration。

面試口說整理
#

每次攻擊的效果會被下一次攻擊打斷,所以實際中毒時間是間隔和 duration 的較小值,最後一次攻擊沒有被打斷,加上完整的 duration。時間 O(n)。

相關文章

LeetCode 414: Third Maximum Number
·1 分鐘
LeetCode Easy Array Sorting
LeetCode 414 解題筆記:記錄三個不同的最大值,重複的數跳過;不到三個不同的數就回傳最大值
LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上
LeetCode 448: Find All Numbers Disappeared in an Array
·1 分鐘
LeetCode Easy Array Hash-Table
LeetCode 448 解題筆記:把陣列本身當雜湊表,看到 x 就把 nums[x - 1] 標成負數,最後還是正數的位置就是沒出現的數
LeetCode 455: Assign Cookies
·1 分鐘
LeetCode Easy Array Two-Pointers Greedy Sorting
LeetCode 455 解題筆記:小孩和餅乾都排序,用最小的、夠大的餅乾滿足最小的小孩;兩個指標各走一次
LeetCode 463: Island Perimeter
·1 分鐘
LeetCode Easy Array Depth-First-Search Breadth-First-Search Matrix
LeetCode 463 解題筆記:每格陸地貢獻 4 條邊,每跟上方或左方的陸地相鄰一次就少 2 條
LeetCode 268: Missing Number
·1 分鐘
LeetCode Easy Array Hash-Table Math Binary-Search
LeetCode 268 解題筆記:0 到 n 的總和減掉陣列總和就是缺的那個;缺的可能是 0