
[문제]
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.
https://leetcode.com/problems/minimum-size-subarray-sum/
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int l = 0;
int r = 0;
int sum = nums[l];
int min_val = Integer.MAX_VALUE;
while(l <= r && r < nums.length) {
if (sum < target) {
if (r == nums.length - 1) {
break;
}
sum += nums[++r];
} else {
min_val = Math.min(min_val, r - l + 1);
sum -= nums[l++];
}
}
if (min_val == Integer.MAX_VALUE) {
return 0;
} else {
return min_val;
}
}
}
// 10,000,000,000
// v v
// 2 3 1 2 3 3
// 합이 같으면 right를 증가시켜
// 합이 크면 left를 증가시켜
// 합이 작으면 right를 증가시켜
0 번째 인덱스를 초기값으로 두고, 조건에 따라 l,r 포인터를 이동시킨다.
요소들의 합이 target값 보다 작다면, r 포인트를 우측으로 이동시킨뒤 총합을 증가시킨다.
요소들의 합이 target값 보다 크다면, 현재 l 인덱스 값을 총합에서 감소시키고 l 포인트를 우측으로 이동시킨다.
만약, 요소들의 총합이 target 값 보다 작은데 r 포인터가 배열의 마지막에 위치한다면 더 이상 총합의 값을 증가시킬 수 없으므로 탐색을 종료한다.