[ LeetCode | Java ] 167. Two Sum II - Input Array Is Sorted 📝

dokim·2023년 8월 28일
post-thumbnail

🏷️167. Two Sum II - Input Array Is Sorted


1. 문제 설명

  • 주어진 1-인덱스 배열인 numbers는 이미 비내림차순으로 정렬되어 있습니다. 특정한 목표 숫자를 만들기 위해 두 숫자를 찾으세요. 이 두 숫자를 numbers[index1]과 numbers[index2]라고 하겠습니다. 여기서 1 <= index1 < index2 < numbers.length입니다.

  • index1과 index2의 인덱스를 1씩 증가시킨 정수 배열 [index1, index2]로 반환하세요. 이 배열의 길이는 2입니다.

  • 테스트는 정확히 하나의 해결책이 존재하도록 생성됩니다. 동일한 요소를 두 번 사용할 수 없습니다.

  • 해결책은 상수의 추가 공간만 사용해야 합니다.

예시 1:

입력: 숫자 = [ 2 , 7 ,11,15], 대상 = 9
출력: [1,2]
설명: 2와 7의 합은 9입니다. 따라서 인덱스 1 = 1, 인덱스 2 = 2입니다. [ 1, 2].

예시 2:

입력: 숫자 = [ 2 ,3, 4 ], 대상 = 6
출력: [1,3]
설명: 2와 4의 합은 6입니다. 따라서 인덱스 1 = 1, 인덱스 2 = 3. [1, 3을 반환합니다. ].

예시 3:

입력: 숫자 = [ -1 , 0 ], 대상 = -1
출력: [1,2]
설명: -1과 0의 합은 -1입니다. 따라서 인덱스 1 = 1, 인덱스 2 = 2입니다. [1, 2]를 반환합니다.

제약:

  • 2 <= numbers.length <= 3 * 10^4
  • -1000 <= numbers[i] <= 1000
  • numbers내림차순이 아닌 순서 로 정렬됩니다.
  • -1000 <= target <= 1000
  • 테스트는 정확히 하나 의 솔루션이 있도록 생성됩니다.

2. 접근 방법


3. 구현 코드

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        
        int start = 0;
        int end = numbers.length - 1;
        int[] re = new int[2];
        while(start < end){
            int hap = numbers[start] + numbers[end]; 
            if(hap == target){
                re[0] = start +1;
                re[1] = end +1;
                break;
            }
                
            else if (hap > target)
                end--;
            else
                start++;
        }
        return re;
    }
}

4. 개선 사항


5. 최종 회고


6. 참고

0개의 댓글