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