class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        """
        sliding window, 2 loops 
        1. initialize left ptr, right ptr local sum 
        2. loop array, get accumutive local sum 
        3. when local sum >= s, move left ptr and compare with global min size (ans) 
        4. check if ans has changed from initiali value 
        """
        # time O(N) space O(1)
        n = len(nums)
        res =  n+1
        l = 0
        sumSub = 0
        for r in range(n):
            sumSub += nums[r]
            while sumSub >= s:
                res = min(r-l+1,res)
                sumSub -= nums[l]
                l += 1 
        return res if res != n+1 else 0