참고
문제해설
문제 로직고민
NOTE
•
비내림차순으로 정렬되어 있으며, 조건을 만족하는 숫자쌍은 단 하나만 존재한다!
◦
가장 작은값 + 가장 큰 값을 진행하면서 목표 숫자와 비교한다.
◦
만약 값이 0보다 크다면 가장 큰 값보다 1단계 작은 값을 고른다.
◦
만약 값이 0보다 작다면 가장 작은 값보다 1단계 큰 값을 고른다.
◦
만약 값이 0이라면 정답이므로 각 idx를 +1한 값을 배열에 담아서 리턴한다.
작성코드
NOTE
class Solution {
public int[] twoSum(int[] numbers, int target) {
int startIdx = 0;
int lastIdx = numbers.length -1;
int[] result = new int[2];
while(startIdx < lastIdx){
int sum = numbers[startIdx] + numbers[lastIdx];
if(sum == target){
result[0] = startIdx + 1;
result[1] = lastIdx + 1;
break;
}
else if(sum < target) startIdx++;
else lastIdx--;
}
return result;
}
}
Java
복사
정답코드
NOTE
class Solution {
public int[] twoSum(int[] numbers, int target) {
int req;
int a;
for (int index2 = 1; index2 < numbers.length; index2++) {
req = target - numbers[index2];
a = Arrays.binarySearch(numbers, 0, index2, req);
if (a > -1) {
System.gc();
return new int[]{a + 1, index2 + 1};
}
}
return new int[2];
}
}
Java
복사
메모리를 가장 적게 사용하는 코드
•
로직은 그렇게 차이 나지는 않는것같아 참고만 했다.