문제 연속된 부분 수열의 합
** 비내림차순 : 오름차순으로 정렬이 되어 있는 상태이지만 같은 값이 들어있을 수 있다
투포인터 알고리즘을 사용하여 풀었다.
1. 시작과 끝의 지점을 똑같은 인덱스로 표시한다.
2. 합친 값 즉 sum이 목표 값인 k보다 낮으면 끝의 지점을 +1을 하여 더해준다.
3. 합친 값이 목표 값보다 큰 경우에는 시작 지점을 +1을 더해주고 처음에 넣어준 값을 빼준다.
import java.util.*;
class Solution {
public int[] solution(int[] sequence, int k) {
int[] answer = new int[2];
int left = 0, right = 0;
int sum = 0;
int len = -1;
while(left < sequence.length)
{
while(right < sequence.length && sum < k)
{
sum += sequence[right++];
}
if(sum == k)
{
if(len == -1 || len > right - left)
{
answer[0] = left;
answer[1] = right-1;
len = right - left;
}
}
sum -= sequence[left++];
}
return answer;
}
}