LeetCode 209. 長度最小的子陣列(C++、python)
阿新 • • 發佈:2018-11-21
給定一個含有 n 個正整數的陣列和一個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。
示例:
輸入:s = 7, nums = [2,3,1,2,4,3]
輸出: 2 解釋: 子陣列[4,3]
是該條件下的長度最小的連續子陣列。
C++
class Solution { public: int minSubArrayLen(int s, vector<int>& nums) { int n=nums.size(); int left=0; int right=0; int sum=0; int len=n+1; while(right<n) { if(sum<s) { sum+=nums[right]; right++; } else { len=min(len,right-left); sum-=nums[left]; left++; } } while(sum>=s) { len=min(len,n-left); sum-=nums[left]; left++; } return (n+1==len)?0:len; } };
python
class Solution: def minSubArrayLen(self, s, nums): """ :type s: int :type nums: List[int] :rtype: int """ n=len(nums) tmp=0 left=0 right=0 length=n+1 while right<n: if tmp<s: tmp+=nums[right] right+=1 else: length=min(length,right-left) tmp-=nums[left] left+=1 while tmp>=s: length=min(length,n-left) tmp-=nums[left] left+=1 if length==n+1: return 0 return length