Algorithm/문제
알고리즘문제 | 다중포인터 패턴
일렁이는코드
2023. 5. 14. 16:30
문제설명
오름차순으로 정렬된 int arr을 받는 sumZero라는 함수가 있다.
해당 함수는 두개의 요소의 합이 0이 되는 첫번째 쌍을 배열로 반환하며, 합이 0이 되는 요소가 없다면 undefined를 반환한다.
예시
arr | return |
[-4,-3,-2,-1,0,1,2,3,10] | [-3,3] |
[-2,0,1,3] | undefined |
[1,2,3] | undefined |
💡문제풀이
function sumZero(arr) {
let leftIdx = 0;
let rightIdx = arr.length - 1;
while (leftIdx < rightIdx) {
let sum = arr[leftIdx] + arr[rightIdx];
if (sum === 0) {
return [arr[leftIdx], arr[rightIdx]];
} else if (sum > 0) {
rightIdx--;
} else if (sum < 0) {
leftIdx++;
}
}
}
console.log(sumZero([-4, -3, -2, -1, 0, 1, 2, 3, 10])); // [-3,3]
해당 풀이의 시간 복잡도는 O(n)이며,
left, right에 해당하는 두 요소를 맨 끝에 위치시키고
sum이 0이라면 pair를 return,
sum이 음수라면 right를 한칸 앞의 index로 설정하고
sum이 양수라면 left를 한칸 뒤의 index로 설정하여 찾으면 된다.
반응형