"Two Sum II - 입력 배열이 정렬됨" 문제는 배열 및 포인터 조작에 대한 이해를 테스트하는 고전적인 코딩 문제입니다. 또한 우아하면서도 효율적인 솔루션을 선보일 수 있는 좋은 기회이기도 합니다. 문제를 자세히 살펴보고 문제 해결을 위한 최적의 접근 방식을 분석해 보겠습니다.
LeetCode 문제 바로가기
내림차순으로 정렬된 1 인덱스 정수 배열이 주어지면, 목표는 그 합이 주어진 목표와 같아지는 두 숫자를 찾는 것입니다. 이 두 숫자의 인덱스를 배열 [index1, index2]로 반환해야 합니다. 여기서 1 <= index1 < index2 <= 숫자.길이. 솔루션은 일정한 추가 공간만 사용해야 합니다.
입력: 숫자 = [2,7,11,15], 대상 = 9
출력: [1, 2]
입력: 숫자 = [2,3,4], 대상 = 6
출력: [1, 3]
입력: 숫자 = [-1,0], 대상 = -1
출력: [1, 2]
문제의 제약 조건(정렬된 배열과 단일 솔루션)으로 인해 이 문제는 2포인터 기술의 완벽한 후보가 됩니다. 이유는 다음과 같습니다.
다음은 두 포인터 접근 방식의 JavaScript 구현입니다.
/** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(nums, target) { const length = nums.length; let rightPointer = length - 1; let leftPointer = 0; while (leftPointer < rightPointer) { if (nums[leftPointer] + nums[rightPointer] === target) { return [leftPointer + 1, rightPointer + 1]; } if (nums[leftPointer] + nums[rightPointer] > target) { rightPointer--; } else { leftPointer++; } } };작동 방식
두 포인터 초기화:
- leftPointer는 배열의 시작 부분에서 시작됩니다.
- rightPointer는 배열의 끝에서 시작됩니다.
만날 때까지 반복:
- leftPointer와 rightPointer에 있는 요소의 합을 계산합니다.
- 합계가 목표값과 일치하면 1번째 인덱스 위치를 반환합니다.
- 합계가 목표보다 크면 rightPointer를 감소시켜 합을 줄입니다.
- 합계가 목표보다 작으면 leftPointer를 증가시켜 합을 늘립니다.
색인 반환:
- 올바른 쌍을 찾으면 루프가 종료되고 인덱스가 반환됩니다.
예제 연습
첫 번째 예를 살펴보겠습니다.
2포인터 방법은 입력 배열의 정렬된 특성을 활용하여 "Two Sum II - 입력 배열이 정렬됨" 문제를 우아하게 해결합니다. 이는 효율성을 보장할 뿐만 아니라 공간 제약을 준수하는 강력한 기술이므로 유사한 문제에 대한 접근 방식이 됩니다. 즐거운 코딩하세요!
위 내용은 두 합 II를 효율적으로 풀기 - 입력 배열이 정렬됨의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!