[LeetCode] 209. Minimum Size Subarray Sum
문제 설명
https://leetcode.com/problems/minimum-size-subarray-sum
풀이
30분
two pointer 방식으로 풀이했다. 처음에 반복문 설계를 잘못해서, 조건문이 덕지덕지 붙는 것이 보기 싫어 고민해서 다시 작성했다.
잘 이해가 안 되는 부분은, 문제의 분류가 sliding window 인데 two pointer 와의 차이점을 찾아보니 찾는 구간의 크기가 고정적이면 sliding window 라고 한다. 근데 문제는 최소 구간을 찾는 문제니, two pointer 로 보는게 맞지 않나…? 굳이 sliding window 로 풀려면 window size 를 1 ~ n 로 정해서 탐색해야 하는게 아닌가 싶다.
코드
// 15:32 ~ 16:00
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int min = 1000000001;
int sum = nums[0];
int i = 0, j = 0;
while(j < nums.size()){
if(sum < target){
j += 1;
if(j < nums.size()) sum += nums[j];
} else {
if(j - i + 1 < min) min = j - i + 1;
sum -= nums[i];
i += 1;
}
}
if(min == 1000000001) return 0;
return min;
}
};