var minSubArrayLen = function (target, nums) {
let start = 0;
let sum = 0;
let length = Number.MAX_SAFE_INTEGER;
for (let end = 0; end < nums.length; end++) {
sum += nums[end];
// console.log('pastSum: ', sum);
while (sum >= target) {
length = Math.min(length, end - start + 1);
sum -= nums[start];
// console.log('curSum: ', sum);
start++;
}
}
return length === Number.MAX_SAFE_INTEGER ? 0 : length;
};
이전에 풀었던 문제(링크)와 유사하게 슬라이딩 윈도우 알고리즘(참고 링크)을 사용한 배열 문제다. target === Subarray의 합계가 되어야 하는데, 조건을 만족하는 Subarray중 가장 짧은 길이를 가진 Subarray의 길이를 return하면 되는 문제다.
start 포인터와 end 포인터를 지정해주고 end 포인터가 먼저 loop을 돌 때마다 하나씩 증가하도록 만들어준다. start 포인터는 sum이 target보다 크거나 같을 때만 sum을 start index에 해당하는 요소를 반복해서 빼준다. 한번 sum에서 마이너스 할 때마다 start index를 앞으로 한 칸 옮겨준다.
만약 모든 nums 배열의 모든 요소의 합이 target보다 작다면 length가 여전히 Number.MAX_SAFE_INTEGER이기 때문에 마지막에 삼항 연산자를 사용해 return 해준다.
수정, 지적을 환영합니다!
https://leetcode.com/problems/minimum-size-subarray-sum/