문제 링크: https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/
지난 번 작성한 Two Sum을 다르게 풀어보는 문제이다.
input으론 정렬된 배열이 주어지고, 합이 target이 되는 두 원소를 찾아 그 위치를 반환하는 문제이다.
하지만, 위의 두 해결방법은 input으로 주어진 배열이 정렬된 상태라는 것을 활용하지 않는다.
이를 활용해 더 나은 방법으로 문제를 풀어볼 수 있다.
각각 정렬된 배열의 첫번째 원소와 마지막 원소를 가리키고 있는 두 index를 사용할 것이다.
두 포인터가 가리키는 위치의 두 원소의 합과 target을 비교한다.
class Solution {
public int[] twoSum(int[] numbers, int target) {
int lo=0;
int hi=numbers.length-1;
int sum;
while(lo<hi) {
sum = numbers[lo]+numbers[hi];
if(sum == target) return new int[] {lo+1, hi+1};
else if(sum < target) lo++;
else hi--;
}
return new int[] {};
}
}
최악의 경우 O(N)의 시간 복잡도로 문제를 해결할 수 있다.