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.
题目链接:https://leetcode.com/problems/minimum-size-subarray-sum/
题目分析:尺取法,小于s右指针右移,大于等于s,记录答案的同时将左指针左移,时间复杂度O(n)
public class Solution {
public int minSubArrayLen(int s, int[] nums) {
int left = 0, right = 0, len = nums.length;
int ans = len + 1, cur = 0;
while(right < len) {
while(right < len && cur < s) {
cur += nums[right];
right ++;
}
ans = Math.min(ans, right - left + 1);
while(left <= right && cur >= s) {
cur -= nums[left];
left ++;
ans = Math.min(ans, right - left + 1);
}
}
if(ans == len + 1) {
return 0;
}
return ans;
}
}