209. Minimum Size Subarray Sum(很重要)

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.

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).

1.方法一

left和right最初都指向0; right右移直到sum>=s;再右移left直到sum

时间复杂度O(n)。

class Solution {
public:
	int minSubArrayLen(int s, vector& nums) {
		int left=0,right=0;
		int len=nums.size();
		int res=len+1;
		int sum=0;
		while(right=s){
				sum-=nums[left];
				left++;
				res=min(res,right-left+1);
			}
		}
		return res==len+1?0:res;
	}
};

2,方法2
class Solution {
public:
	int minSubArrayLen(int s, vector& nums) {
		int len=nums.size();
		if(len==0) return 0;
		vector sums(len,0);
		sums[0]=nums[0];
		for(int i=1;i& sums,int s){
		int left=start,right=sums.size()-1;
		int offset=start==0?0:sums[start-1];
		while(left<=right){
			int mid=left+(right-left)/2;
			int sum=sums[mid]-offset;
			if(sum>=s){
				right=mid-1;
			}else{
				left=mid+1;
			}
		}
		return left;
	}
};



你可能感兴趣的:(leetcode)