209. Minimum Size Subarray Sum

209. Minimum Size Subarray Sum

題目有給目標值,要找尋的子陣列是子陣列總和大於或等於目標值即可。

所以滑動窗口的題目,我們只要找到子陣列的總和開始大於或等於目標的時候,就可以開始縮減窗口,可是要注意一個地方,滑動窗口的題目,一定要注意是在何時更新我們的答案

這個題目裡面,當縮減窗口的條件一達成的時候,還不用急著滑動左邊的窗口,就可以先計算出答案,如下方的答案所示。

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:

        ans = float('inf')
        fast = 0
        slow = 0
        acc = 0
        while fast < len(nums):
            num = nums[fast]
            fast += 1
            acc += num

            while acc >= target:
                ans = min(ans, fast - slow)
                d = nums[slow]
                slow += 1
                acc -= d

        return 0 if ans == float('inf') else ans

或是習慣先縮減窗口也可以,但是求值時要記得再加一回來。

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:

        ans = float('inf')
        fast = 0
        slow = 0

        acc = 0
        while fast < len(nums):
            num = nums[fast]
            fast += 1
            acc += num

            while acc >= target:
                d = nums[slow]
                slow += 1
                acc -= d
                ans = min(ans, fast - slow + 1)

        return 0 if ans == float('inf') else ans