๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Study Note/LeetCode

209. Minimum Size Subarray Sum

by Jellll_y 2022. 12. 28.

209. Minimum Size Subarray Sum

Medium


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

 

Constraints:

  • 1 <= target <= 109
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 104

 

Follow up: If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log(n)).
 

๋ฌธ์ œ ์ ‘๊ทผ๋ฒ•

ํ•˜์œ„ ๋ฐฐ์—ด์˜ ํ•ฉ์ด target๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€๊ฒฝ์šฐ ํ•˜์œ„ ๋ฐฐ์—ด์˜ ์ตœ์†Œ ๊ธธ์ด๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. 
ํ•˜์œ„ ๋ฐฐ์—ด์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.
 
1. window์˜ ์‹œ์ž‘์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” left์™€ ๊ฒฐ๊ณผ๊ฐ’ ans, ํ•˜์œ„ ๋ฐฐ์—ด์˜ ํ•ฉ์„ ์ €์žฅํ•  sum ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ค€๋‹ค. 
2. ์ฃผ์–ด์ง„ nums๋ฅผ for๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ’์„ sum์— ๋”ํ•ด์ค€๋‹ค.
3. sum >= target ์ธ๊ฒฝ์šฐ (while)
  1. ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ans์— ์žฌํ• ๋‹น ํ•ด์ค€๋‹ค.
  2. window ์‚ฌ์ด์ฆˆ๋ฅผ ์ดˆ๊ณผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— sum -= nums[left++] (์ด๋•Œ window ๊ธฐ์ค€์€ ํ•˜์œ„ ๋ฐฐ์—ด์˜ ํ•ฉ์ด target ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. )

4. ํ•˜์œ„ ๋ฐฐ์—ด์˜ ํ•ฉ์ด ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์€ ๊ฒฝ์šฐ (ans === Infinity) 0์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. ์•„๋‹ ๊ฒฝ์šฐ ans ๋ฆฌํ„ด 

 

/**
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function(target, nums) {
    let left = 0, ans = Infinity, sum = 0;

    for (let right = 0; right < nums.length; right++) {
        sum+= nums[right]
        
        // window ์ดˆ๊ณผ
        // ํ•˜์œ„ ๋ฐฐ์—ด์˜ ํ•ฉ์ด target ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„๋•Œ ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค.
        while (sum >= target) { 
            ans = Math.min(ans, right+1-left)
            sum -= nums[left++]
        }
    }

    return ans === Infinity ? 0 : ans;
};

'๐Ÿ“š Study Note > LeetCode' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

1091. Shortest Path in Binary Matrix  (0) 2023.02.06
2091. Removing Minimum and Maximum From Array  (0) 2023.02.01
346. Moving Average from Data Stream  (0) 2022.12.26
2225. Find Players With Zero or One Losses  (0) 2022.11.28
967. Numbers With Same Consecutive Differences  (0) 2022.11.26