3Sum - Two Pointer Algorithm
2021. 11. 2. 17:21ㆍ개발 잡부/알고리즘
728x90
3Sum - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제
리스트에서 세개의 숫자를 합쳐서 0이 되는 모든 조합을 반환하라.
단, 결과가 겹쳐서는 안된다.
문제 해결 방안
숫자 하나를 잡고 나머지 숫자들을 two pointer로 조합을 찾아낸다.
목표 합보다 두 포인터의 합이 더 크면 right 포인터를 낮추고,
두 포인터의 합이 더 작으면 left 포인터를 높인다.
코드 (TypeScript)
function threeSum(nums: number[]): number[][] {
let result: [number, number, number][] = [];
// sort nums increasing
nums.sort((a, b) => a - b);
let i = 0;
while (i < nums.length - 2) {
// two pointer algorithm
let left = i + 1;
let right = nums.length - 1;
let sum = -nums[i];
while (left < right) {
// find result
if (nums[left] + nums[right] == sum) {
// add answer into result list
result.push([nums[i], nums[left], nums[right]]);
// skip left duplicates
while (left < right && nums[left] == nums[left + 1]) {
left++;
}
// skip right duplicates
while (left < right && nums[right] == nums[right - 1]) {
right--;
}
// move pointer
left++;
right--;
} else if (nums[left] + nums[right] < sum) {
left++;
} else {
right--;
}
}
// skip i duplicates
for (; i < nums.length - 2; i++) {
if (nums[i] !== nums[i + 1]) {
break;
}
}
i++;
}
return result;
};
'개발 잡부 > 알고리즘' 카테고리의 다른 글
Algorithm Study Plan 1 후기 (0) | 2021.11.08 |
---|---|
Unique Binary Search Trees - Dynamic Programming (0) | 2021.11.08 |
Populating Next Right Pointers in Each Node - BFS 알고리즘 (0) | 2021.11.02 |
Unique Paths III - DFS 알고리즘 (0) | 2021.11.02 |
Surrounded Regions - BFS 알고리즘 (0) | 2021.11.02 |