Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn't one, return 0 instead.
For example, given the array [2,3,1,2,4,3]
and s = 7
,
the subarray [4,3]
has the minimal length under the problem constraint.
click to show more practice.
If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).
思路:采用Window的思想,保证在窗内满足>=k的值,动态更新subarray的大小,找到所有subarray的最小值。扫描时动态更新边界。这样是O(N)的算法。
class Solution { public: int minSubArrayLen(int s, vector<int>& nums) { int length = nums.size(); int ret = nums.size()+1; int temp = 0; int start = 0; for(int i=0;i<length;++i){ if(temp<s){ temp += nums[i]; } while(temp>=s){ //更新右边界 ret = (i-start+1)<ret?(i-start+1):ret; temp = temp - nums[start]; start++; //更新左边界 } } if(ret == nums.size()+1) //判断是否存在结果 return 0; return ret; } };