
배열 하나와 target이 주어진다.
배열안에 있는 값들을 더해서 target 이상의 값을 구한다.
이때 배열안에 있는 값들의 수가 가장 적은 값을 리턴한다.
탐색을 위한 두 개의 인덱스를 둔다. (leftIndex, rightIndex)
rightIndex가 0번 인덱스부터 탐색을 하면서 누적합을 구한다.
이때 누적합이 target 이상이라면 누적합에 누적된 숫자들의 갯수를 확인하고
누적합에서 leftIndex 값을 빼준다.
슬라이딩 윈도우가 가변적으로 변하는 점에서 투포인터와 크게 다르다고 생각하지 않았다.
그래서 투포인터로 접근하려 했었는데 최소 숫자 갯수를 체크하는 조건에서 조금은 시간이 걸렸다.
public int minSubArrayLen(int target, int[] nums) {
int leftIndex = 0;
int rightIndex = 0;
int count = Integer.MAX_VALUE;
int sum = 0;
while (rightIndex < nums.length) {
sum += nums[rightIndex];
while (sum >= target) {
count = Math.min(count, rightIndex - leftIndex + 1);
sum -= nums[leftIndex++];
}
rightIndex++;
}
return count == Integer.MAX_VALUE ? 0 : count;
}
