class Solution1(object):
    def minSubArrayLen(self, target, nums):
        """
        :type target: int
        :type nums: List[int]
        :rtype: int
        """
        sub = []
        sub.append(0)
        num_sum = 0
        for ind, num in enumerate(nums):
            sub.append(num_sum + num)
            num_sum += num
        print(nums)
        for length in range(1, len(nums) + 1):
            print(length)
            for i in range(0, len(nums) - length + 1):
                rlt = sub[ i + length ] - sub[i]
                print(rlt, length, i)
                if rlt >= target:
                    return length
        return 0
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        if sum(nums) < target:
            return 0
        left_idx = 0
        s = 0 # sum
        ans = len(nums)

        for right_idx, val in enumerate(nums):
            s += val
            while s >= target:
                s -= nums[left_idx]
                ans = min(ans, right_idx - left_idx + 1)
                left_idx += 1
        return ans

print(Solution().minSubArrayLen(7, [2,3,1,2,4,3]))
print(Solution().minSubArrayLen(4, [1, 1, 4]))
print(Solution().minSubArrayLen(11, [1, 1, 1, 1]))
print(Solution().minSubArrayLen(15, [1, 2, 3, 4, 5]))