악명 높은 Two Sum 문제. (DSA 시리즈 3)
문제
정수 nums의 배열과 정수 target이 주어지면 두 숫자의 인덱스를 반환하여 합계가 target이 되도록 합니다.
각 입력에 정확히 하나의 솔루션이 있다고 가정할 수 있으며 동일한 요소를 두 번 사용할 수 없습니다.
어떤 순서로든 답변을 반환할 수 있습니다.
해결책
function twoSum(array, target){
let low = 0;
let high = array.length - 1;
while (low < high) {
const sum = array[low] + array[high];
if (sum === target) return [low, high];
if (sum > target) high--;
else if (sum < target) low++;
}
}
방법 2
/**
*
* Input: nums = [2,7,11,15], target = 9
* Output: [0,1]
* Initialize a map,
* loop through array,
* subtract currentItem from target to get compliment,
* if compliment exist in map, return [currentItmIdx, compliment[]]
* else add map[curentItem] = idx
* @param {*} array
* @param {*} target
*/
function twoSumMethod2(array, target){
const map = {};
for (let i = 0; i < array.length; i++) {
let com = target - array[i];
if(map[com] !== undefined) return [i, map[com]]
else map[array[i]] = i;
}
return -1
}
테스트 예
상수 숫자 = [2,7,11,15], 대상 = 9;
상수 숫자 = [3,3], 대상 = 6
-
어쨌든 이 문제를 더 잘 해결할 수 있는 방법이 있다면 댓글에 솔루션을 추가할 수 있습니다. 나는 전문가가 아니다. 소리내어 배우기만 하면 됩니다.
좋아요, 공유 및 댓글 남기는 것을 잊지 마세요. :)
Reference
이 문제에 관하여(악명 높은 Two Sum 문제. (DSA 시리즈 3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/olumidesamuel_/the-infamous-two-sum-problem-dsa-series-3-5f6d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)