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;
}
};