- 만약 배열 요소들의 합이 타겟 값보다 크거나 같으면, 최소의 길이를 비교하여 교체한다.
- 가장 왼쪽의 배열의 값을 뺀다.
- 왼쪽의 인덱스 값을 증가시킨다.
left = 0;
minLength = 최소값;
sum = 0;
for(0, 배열 길이, 1증가)
sum += 배열의 값;
while(sum >= target)
minlength = Math.min(target, 배열의 길이);
sum -= num[left];
left++;
return minLength != Integer.MAX_VALUE ? minLength : 0
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int left = 0;
int minLength = Integer.MAX_VALUE;
int sum = 0;
for (int right = 0; right < nums.length; right++) {
sum += nums[right];
while (sum >= target) {
minLength = Math.min(minLength, right - left + 1);
sum -= nums[left];
left++;
}
}
return minLength != Integer.MAX_VALUE ? minLength : 0;
}
O(n + n) -> O(n)
O(1)
O(n)
O(1)
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int ans =Integer.MAX_VALUE;
int sum=0;
int i=0;int j=0;
while(j<nums.length){
sum+=nums[j];
while(sum>=target){
ans=Math.min(ans,j-i+1);
sum-=nums[i++];
}
j++;
}
if(ans==Integer.MAX_VALUE){
return 0;
}
else {
return ans;
}
}
}
표현만 다를 뿐 slide window 전략을 적용하는 원리는 비슷한 것 같습니다.