Description
Given an array of positive integers nums and a positive integer target, return the minimal length of a contiguous subarray [numsl, numsl+1, …, numsr-1, numsr] of which the sum is greater than or equal to target. If there is no such subarray, return 0 instead.
Example 1:
Input: target = 7, nums = [2,3,1,2,4,3]
Output: 2
Explanation: The subarray [4,3] has the minimal length under the problem constraint.
Example 2:
Input: target = 4, nums = [1,4,4]
Output: 1
Example 3:
Input: target = 11, nums = [1,1,1,1,1,1,1,1]
Output: 0
Constraints:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[\i] <= 105
Solution
- Initialize left=right=0, and call the index closed interval [left, right] a window.
- Continuously increase the right pointer to expand the window until the string in the window meets the requirements (satisfies >= target).
- Stop increasing the right, and instead increase the left to shrink the window until the string in the window no longer meets the requirements
- At the same time, each time left is increased, a round of results must be recorded.
- Repeat steps until right reaches the end of the string.
1 | # O(n) time | O(n) sapce |
optimize the complexity of space from linear to to constant.
1 | # O(n) time | O(1) space |