File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change
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)
You can’t perform that action at this time.
0 commit comments