Two Sum II - Input Array Is Sorted

bong bong·2023년 8월 29일

알고리즘

목록 보기
21/31
요구사항
이미 비내림차순으로 정렬되어 있는 1부터 인덱스가 지정된 정수 배열이 주어지면 더해져서 특정 숫자가 되는 두 숫자를 찾습니다 . 이 두 숫자를 와 어디에 이라고 두십시오 .numberstargetnumbers[index1]numbers[index2]1 <= index1 < index2 < numbers.length

길이가 2인 정수 배열로 1을 더한 두 숫자 및 의 인덱스를 반환합니다 .index1index2[index1, index2]

테스트는 정확히 하나 의 솔루션이 있도록 생성됩니다 . 동일한 요소를 두 번 사용할 수 없습니다 .

솔루션은 일정한 추가 공간만 사용해야 합니다.

요구사항 파악
비 내림미차순 으로 정렬되어 있는 배열 두 합이 주어진 타겟과 같아지면 끝이다 .
일단 왼쪽 배열이 제일 작으므로 투포인터로 가장 큰수 가장 작은수를 더하는것으로 풀어보자!

투포인터 설계
1 2 3 4 5 6
3 8 10 12 23 40
만약 이런 배열의 길이 6인 배열이 있다 하면

왼쪽 큰수 더하기 작은수를 하고
합이 주어진 타겟 합보다 크면 가장 큰수를 한칸 줄여주고 만약 합이 주어진 타겟 합 보다 작으면 작은수를 하나씩 키워볼까?
while(true)
if(sum == target){
현재 두 인덱스가 정답!
}
else if(sum>target){
right --;
}
else if(sum<target){
left ++;
}

결과 코드

public int[] twoSum(int[] numbers, int target) {
          int left = 0;
        int right = numbers.length - 1;
        
        while (left < right) {
            int sum = numbers[left] + numbers[right];
            
            if (sum == target) {
                return new int[]{left + 1, right + 1}; 
            } else if (sum < target) {
                left++;
            } else {
                right--;
            }
        }
        
        return new int[0];
    }
profile
let's go invent tomorrow rather than worrying about what happened yesterday - Steven Paul Jobs

0개의 댓글