Skip to content

Commit cffced5

Browse files
committed
two sum solution
1 parent 4c8b68f commit cffced5

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

two-sum/limlimjo.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number[]}
5+
*/
6+
var twoSum = function (nums, target) {
7+
for (let i = 0; i < nums.length; i++) {
8+
for (let j = 0; j < nums.length; j++) {
9+
if (i !== j) {
10+
if (nums[i] + nums[j] === target) {
11+
return [i, j];
12+
}
13+
}
14+
}
15+
}
16+
};
17+
18+
// 처음에 풀었던 방법 -> 시간 복잡도가 O(n^2)로 nums 배열에 있는 값이 늘어날수록 성능상 좋지 못함
19+
// 시간 복잡도: O(n^2)
20+
// 공간 복잡도: O(1)
21+
22+
// 두 번째 푼 방법 -> 이전에 threeSum 문제 풀 때 정렬 + 포인터 이용한 것처럼 이 문제도 그런식으로 품
23+
/**
24+
* @param {number[]} nums
25+
* @param {number} target
26+
* @return {number[]}
27+
*/
28+
var twoSum = function (nums, target) {
29+
const numsIndex = nums.map((num, i) => ({ num, i })); // 원래 인덱스 저장
30+
//console.log(numsIndex);
31+
32+
numsIndex.sort((a, b) => a.num - b.num); // 오름차순 정렬
33+
//console.log(numsIndex);
34+
35+
// left와 right 포인터 이용해 target값과 동일한 것 찾기
36+
let left = 0;
37+
let right = numsIndex.length - 1;
38+
39+
while (left < right) {
40+
const sum = numsIndex[left].num + numsIndex[right].num;
41+
42+
if (sum > target) {
43+
right--;
44+
} else if (sum < target) {
45+
left++;
46+
} else {
47+
return [numsIndex[left].i, numsIndex[right].i];
48+
}
49+
}
50+
return null;
51+
};
52+
53+
// 첫 번째 푼 방법보다 공간 복잡도가 늘어났지만 시간 복잡도는 줄어듦
54+
// 시간 복잡도: O(n log n)
55+
// 공간 복잡도: O(n)

0 commit comments

Comments
 (0)