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

LeetCode 674: Longest Continuous Increasing Subsequence

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

基本資料
#

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

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

解題思路
#

走過每一段嚴格遞增的連續段(Array 模板一):nums[i] > nums[i - 1] 就延長,否則從 1 重新開始。每一步都更新最大值,就不會漏掉最後一段。不能排序,題目要的是原本順序中連續的一段。

我的嘗試
#

這題提交了 11 次:

  • 第一版先排序,連續遞增的順序就被破壞了,而且回傳的是一個 list。
  • 改成計數後,一版比的是 nums[i + 1],最後一個 index 超出範圍。
  • 有兩版只在段落中斷時更新最大值,迴圈結束時最後一段沒有算到:[0, 1] 回傳 1,答案 2。迴圈後補一次 max 才 AC。

正確解法
#

class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        best = cur = 1
        for i in range(1, len(nums)):
            cur = cur + 1 if nums[i] > nums[i - 1] else 1
            best = max(best, cur)
        return best

複雜度
#

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

要特別避免的錯誤
#

  • 不要排序。
  • 只在段落中斷時更新最大值的話,迴圈結束後要再更新一次。
  • 比較 nums[i] 和 nums[i - 1],用 nums[i + 1] 會超出範圍。

面試口說整理
#

我掃一次,比前一個大就把目前的長度加一,否則重設成 1,每一步都更新最大值,這樣最後一段也會算到。時間 O(n)、空間 O(1)。

相關文章

LeetCode 697: Degree of an Array
·1 分鐘
LeetCode Easy Array Hash-Table
LeetCode 697 解題筆記:記錄每個數的出現次數、第一次和最後一次出現的位置;次數最多的數中,取跨度最短的
LeetCode 628: Maximum Product of Three Numbers
·1 分鐘
LeetCode Easy Array Math Sorting
LeetCode 628 解題筆記:排序後答案只有兩種可能:最大的三個相乘,或最小的兩個(負數)乘最大的一個
LeetCode 645: Set Mismatch
·1 分鐘
LeetCode Easy Array Hash-Table Bit-Manipulation Sorting
LeetCode 645 解題筆記:用總和算:missing = 1..n 的和 - set 的和,duplicate = 陣列總和 - set 的和
LeetCode 661: Image Smoother
·1 分鐘
LeetCode Easy Array Matrix
LeetCode 661 解題筆記:每格取周圍 3 × 3 範圍內存在的格子平均,向下取整;結果要寫到新的矩陣
LeetCode 598: Range Addition II
·1 分鐘
LeetCode Easy Array Math
LeetCode 598 解題筆記:每次操作都包含左上角,被加最多次的是所有操作的交集:min(a) × min(b)
LeetCode 599: Minimum Index Sum of Two Lists
·1 分鐘
LeetCode Easy Array Hash-Table String
LeetCode 599 解題筆記:把 list1 的字串對應到 index,掃 list2 時算兩邊 index 的和,留下和最小的全部字串