|
| 1 | +/** |
| 2 | + * 정수 숫자 배열과 정수 target |
| 3 | + * 숫자 합이 target과 같은 두 숫자의 index를 리턴. |
| 4 | + * 같은 요소 두번 X. 답은 항상 1개 |
| 5 | + * 정렬필요 X |
| 6 | + */ |
| 7 | + |
| 8 | +/** |
| 9 | + * @param {number[]} nums |
| 10 | + * @param {number} target |
| 11 | + * @return {number[]} |
| 12 | + */ |
| 13 | +var twoSum = function (nums, target) { |
| 14 | + //순회. target에서 nums[i]를 뺀 요소를 찾기. |
| 15 | + //2중포문. 시간복잡도 O(1)~O(N^2) |
| 16 | + for (let i = 0; i < nums.length; i++) { |
| 17 | + const subNum = target - nums[i]; // 공간 O(1) |
| 18 | + for (let j = i + 1; j < nums.length; j++) { |
| 19 | + if (nums[j] == subNum) { |
| 20 | + return [i, j]; |
| 21 | + } |
| 22 | + } |
| 23 | + } |
| 24 | +}; |
| 25 | + |
| 26 | +var twoSum2 = function (nums, target) { |
| 27 | + for (let i = 0; i < nums.length; i++) { |
| 28 | + //시간복잡도 O(N) |
| 29 | + const subNum = target - nums[i]; // 공간 O(1) |
| 30 | + if (nums.includes(subNum) && nums.indexOf(subNum) !== i) { |
| 31 | + //시간복잡도 O(N). 2중포문과 같은 효과. |
| 32 | + return [i, nums.indexOf(subNum)]; |
| 33 | + } |
| 34 | + } |
| 35 | +}; |
| 36 | + |
| 37 | +//Better answer |
| 38 | +var twoSum3 = function (nums, target) { |
| 39 | + // map으로 관리하여 indexing 최적화 |
| 40 | + const numMap = new Map(); |
| 41 | + for (let i = 0; i < nums.length; i++) { |
| 42 | + //시간복잡도 O(N) |
| 43 | + const subNum = target - nums[i]; |
| 44 | + if (numMap.has(subNum)) { |
| 45 | + //시간복잡도 O(1) |
| 46 | + return [i, numMap.get(subNum)]; |
| 47 | + } |
| 48 | + numMap.set(nums[i], i); // 공간 O(1) |
| 49 | + } |
| 50 | +}; |
0 commit comments