Minimum Size Subarray Sum
1. Problem Statement
2. Algorithm Design and Approach
3. Implementation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Solution
{
public:
int minSubArrayLen(int target, vector<int> &nums)
{
int l = 0;
int r = 0;
int limit = nums.size();
int window = limit + 1; // r - l + 1
int cur_sum = nums[l];
int flag = 0; //0은 초기 , 1은 전에 l 증가, 2는 전에 r 증가
while (l < limit && r < limit)
{
//현재 합 구해
if (flag == 1)
{
cur_sum -= nums[l - 1];
}
else if (flag == 2)
{
cur_sum += nums[r];
}
//합이 target보다 크거나 같아?
if(cur_sum >= target)
{
window = (r - l + 1) < window ? (r-l+1): window;
cur_sum -= nums[l];
l++;
flag = 1;
}
else
{
r++;
flag = 2;
}
}
return (window == limit + 1) ? 0 : window;
}
};
static const auto _____ = []()
{
ios::sync_with_stdio(false);
cin.tie(0);
return 0;
}();
4. Example Walkthrough
5. Conclusion
- 조건문을 최소화해야한다. -> while (l < limit && r < limit) 대신에 while(l<=r)으로 사용할 수 있는 알고리즘 -> flag을 사용하지 않고 l과 r 포인터가 움직일 때 current sum을 업데이트 + r의 유효성 검사
- 아래 sync_with_stdio를 사용해 input, output 시간을 줄일 수 있다.
This post is licensed under CC BY 4.0 by the author.