209. Minimum Size Subarray Sum

늘보·2021년 10월 17일
0

LeetCode

목록 보기
43/69

💡 풀이

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 포인터는 sumtarget보다 크거나 같을 때만 sumstart index에 해당하는 요소를 반복해서 빼준다. 한번 sum에서 마이너스 할 때마다 start index를 앞으로 한 칸 옮겨준다.

만약 모든 nums 배열의 모든 요소의 합이 target보다 작다면 length가 여전히 Number.MAX_SAFE_INTEGER이기 때문에 마지막에 삼항 연산자를 사용해 return 해준다.

수정, 지적을 환영합니다!

문제 링크

https://leetcode.com/problems/minimum-size-subarray-sum/

LeetCode GitHub

https://github.com/tTab1204/LeetCode

0개의 댓글