Study/Algorithm

LeetCode (C/C++) 209. Minimum size Subarray Sum

hwooo 2024. 6. 1. 12:17

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


풀이

투포인터를 사용, end point를 증가하며 주어진 배열을 순회하며 부분합을 구한다.

이 때 부분합이 target보다 커지면 start point를 증가시켜 target보다 큰 부분합의 최소 길이를 구한 후 최소 길이(minLen)를 갱신한다.


코드

class Solution {
#define MAX_VAL 100001
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int minLen =  MAX_VAL, size = nums.size();
        
        int sum = 0, start = 0, end = 0;

        // 주어진 배열을 끝까지 순회
        while (end < size) {

            // end idx 증가시키면서 현재 idx 합함
            sum += nums[end++];

            // 현재 합 >= target
            if (sum >= target) {

                // 합이 target보다 클 때까지 start idx++ 하며 값을 빼줌
                while (sum - nums[start] >= target) {
                    sum -= nums[start];
                    start++;
                }
                
                // 최소길이 갱신
                minLen = min(minLen, end - start);
            }
        }

        return minLen == MAX_VAL ? 0 : minLen;
    } 
};