- 합이 더 크다면, end를 왼쪽으로 옮김니다.
- 합이 더 작다면, start를 오른쪽으로 옮김니다.
s : 왼쪽 끝 인덱스
e : 오른쪽 끝 인덱스
while(타겟 != 인덱스의 값의 합){
if: 인덱스의 값의 합 > 타겟
-> e를 왼쪽으로 한 칸 이동
else:
-> s를 오른쪽으로 한 칸 이동
return {s + 1, e + 1}
}
class Solution {
public int[] twoSum(int[] numbers, int target) {
int s = 0;
int e = numbers.length - 1;
while(numbers[s] + numbers[e] != target){
if(numbers[s] + numbers[e] > target){
e--;
}else{
s++;
}
}
return new int[]{s + 1, e + 1};
}
O(n)
O(1)
O(n)
O(1)
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0;
int right = numbers.length - 1;
int tmp;
while (left < right)
{
if (numbers[left] + numbers[right] == target) break;
tmp = target - numbers[right]; // 타겟과 오른쪽 인덱스의 값과의 차이를 구한다.
while (numbers[left] < tmp) left++; //왼쪽 인덱스의 값보다 그 차이가 작다면 왼쪽으로 옮긴다.
if (numbers[left] + numbers[right] == target) break;
tmp = target - numbers[left];// 타겟과 오른쪽 인덱스의 값과의 차이를 구한다.
while (numbers[right] > tmp) right--;//왼쪽 인덱스의 값보다 그 차이가 작다면 왼쪽으로 옮긴다.
}
return new int[]{left + 1, right + 1};
}
}
제가 적용한 코드와 표현식이 다를 뿐 원리는 같은 것 같습니다.