Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn\'t one, return 0 instead.

Example: 

Input: s = 7, nums = [2,3,1,2,4,3]
Output: 2
Explanation: the subarray [4,3] has the minimal length under the problem constraint.

Follow up:

If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n). 

 

Answer:

class Solution( ):
    def minSubArrayLen(self, s, nums):
        \"\"\"
        :type s: int
        :type nums: List[int]
        :rtype: int
        \"\"\"
        l=len(nums)
        if l==0:
            return 0
        
        
        
        i=0
        j=0
        tmpsum=nums[i]
        minl=float(\'inf\')
        while True:
            if tmpsum>=s:
                minl=min(minl,j-i+1)
                tmpsum-=nums[i]
                i+=1
            else:
                j+=1
                if j<l:
                    tmpsum+=nums[j]
                else:
                    break
        
        if minl==float(\'inf\'):
            return 0
        return minl
                

i,j为两个边界,

如果sum大于目标值,则i向右移动

否则,则j向右移动

收藏 打印