快轉到主要內容
  1. LeetCode/

LeetCode 209: Minimum Size Subarray Sum

·1 分鐘· ·
LeetCode Daily Medium Array Sliding Window Two Pointers Prefix Sum Binary-Search
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度:中等 第一次嘗試:2025-08-09

  • 總花費時間:00:00.00

解題思路
#

這題屬於滑動視窗。用右指針累加視窗總和,當總和大於等於 target 時,開始從左邊縮小視窗,試著在仍符合條件的前提下把長度壓到最短。

解法
#

  • 維護區間 [left, right]window_sum
  • 每次右移 right 就把 nums[right] 加進 window_sum
  • 只要 window_sum ≥ target,就更新答案,並持續右移 left 同時扣除 nums[left],以取得更短的合法視窗。
from typing import List

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        left = 0
        window_sum = 0
        min_length = float("inf")

        for right, value in enumerate(nums):
            window_sum += value
            while window_sum >= target:
                min_length = min(min_length, right - left + 1)
                window_sum -= nums[left]
                left += 1

        return 0 if min_length == float("inf") else min_length

複雜度
#

  • 時間:O(n)
  • 空間:O(1)

收穫
#

  • 所有數字為正時,滑動視窗才能單調縮小並保證不會漏解。
  • 不變量:一旦 window_sum ≥ target,就嘗試移動 left 以縮短視窗。
  • 另一種作法是前綴和 + 二分搜尋,時間 O(n log n),但本題滑動視窗已是最佳。

遇到的問題
#

相關文章

LeetCode 1695: Maximum Erasure Value (Sliding Window)
·1 分鐘
LeetCode Daily Medium Sliding Window Two Pointers Array Hashset
LeetCode 解題紀錄
LeetCode 3439: Reschedule Meetings for Maximum Free Time (Sliding Window)
·2 分鐘
LeetCode Daily Medium Sliding Window Two Pointers Intervals Array
LeetCode 解題紀錄
LeetCode 30: Substring with Concatenation of All Words
·2 分鐘
LeetCode Daily Hard String Sliding Window Two Pointers Hash Map Frequency-Counter Brute-Force
三種作法:暴力、計數優化、偏移量滑動視窗。
LeetCode 1004: Max Consecutive Ones III
·1 分鐘
LeetCode Daily Medium Sliding Window Array Two Pointers Binary Array
LeetCode 解題紀錄 - 可變大小滑動窗口與零計數
LeetCode 1052: Grumpy Bookstore Owner
·1 分鐘
LeetCode Daily Medium Sliding Window Array Optimization Fixed Window
LeetCode 解題紀錄 - 固定窗口與客戶滿意度優化
LeetCode 1658: Minimum Operations to Reduce X to Zero
·1 分鐘
LeetCode Daily Medium Sliding Window Array Reverse Thinking Prefix Sum
LeetCode 解題紀錄 - 反向思考與滑動窗口