题目链接:https://leetcode.com/problems/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.
If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).
思路:
用两个游标表示当前范围,若满足条件则更新最小长度,否则游标做出相应调整。
算法:
public int minSubArrayLen(int s, int[] nums) { if (nums.length == 0) return 0; int minLen = Integer.MAX_VALUE, start = 0, end = 0; int sum = 0; while (end < nums.length) { while (sum < s && end < nums.length) { sum += nums[end++];//若不满足 则扩大范围 } while (sum >= s && start < end) { minLen = Math.min(minLen, end - start); sum -= nums[start++];//当满足条件后 start增大看是否还存在更小长度 } } if (minLen == Integer.MAX_VALUE) { minLen = 0; } return minLen; }