시간 복잡도를 최소로 하기 위해 단 한 번의 순회만으로 답을 찾아야 하는 문제이다.
투포인터를 사용했으며, 길이가 같은 부분 수열의 경우 앞에 있는 수열의 인덱스를 리턴해야 하기 때문에 조건을 만족하는 이전의 부분수열의 길이를 기억하는 것을 빼먹지 않았어야 했다.
public class Main {
public static void main(String[] args) {
int[] arr = {2, 2, 2, 2, 2};
int k = 6;
System.out.println(Arrays.toString(solution(arr,k)));
}
public static int[] solution(int[] arr, int k){
int start = 0;
int end = 0;
int sum = arr[0];
int[] result = new int[2];
int minLength = Integer.MAX_VALUE;
while(true){
if(sum < k){
end++;
if(end > arr.length-1) break;
sum += arr[end];
}else if(sum == k){
if(end - start < minLength){
result[0] = start;
result[1] = end;
minLength = end-start;
}
sum -= arr[start];
start++;
}else{
sum -= arr[start];
start++;
}
}
return result;
}
}