209. Minimum Size Subarray Sum
Given an array of positive integers nums
and a positive integer target
, return the minimal length of a subarray whose 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:
target
<= 109nums.length
<= 105nums[i]
<= 104Follow up: If you have figured out the O(n)
solution, try coding another solution of which the time complexity is O(n log(n))
.
function minSubArrayLen(target, nums) {
let minLen = Infinity;
let sum = 0;
let start = 0;
for (let i = 0; i < nums.length; i++) {
sum += nums[i];
while (sum >= target) {
const length = i - start + 1;
minLen = Math.min(minLen, length);
sum -= nums[start];
start++;
}
}
if (minLen === Infinity) return 0;
return minLen;
}
一年多前寫過,現在寫還是錯了一次才過==
MarsgoatJul 6, 2023
public class Solution {
public int MinSubArrayLen(int target, int[] nums) {
int sum = 0;
int min = int.MaxValue;
int left = 0;
for (int right = 0; right < nums.Length; right++) {
sum += nums[right];
while (sum >= target) {
min = Math.Min(min, right - left + 1);
sum = sum - nums[left++];
}
}
return min == int.MaxValue ? 0 : min;
}
}
JimJul 6, 2023
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
i, j, total = 0, 0, 0
n = len(nums)
ans = float('inf')
while j < n:
total += nums[j]
j += 1
while total >= target:
ans = min(ans, j - i)
total -= nums[i]
i += 1
return ans if ans <= n else 0
Yen-Chi ChenThu, Jul 6, 2023
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int windowStart = 0;
int ans = Integer.MAX_VALUE;
int sum = 0;
for (int windowEnd = 0; windowEnd < nums.length; windowEnd++) {
sum += nums[windowEnd];
while (sum >= target) {
ans = Math.min(ans, windowEnd - windowStart + 1);
sum -= nums[windowStart];
windowStart += 1;
}
}
return ans != Integer.MAX_VALUE ? ans : 0;
}
}
Ron ChenThu, Jul 6, 2023