본문 바로가기

코딩테스트

[LeetCode] Two Sum

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

 

 

나의 풀이 : 

var twoSum = function(nums, target) {
    let answer = []
    
    for(let i = 0; i < nums.length; i ++){
        for(let j = i+1; j < nums.length; j ++){
            if(nums[i] + nums[j] === target){
                answer = [i, j]
            }
        }
    }
    
    return answer    
};

그런데 이렇게 풀었을 경우, O(n^2)가 된다. 

여기까지만 풀었을 때, 이 문제가 왜 hash Table이지? 라는 생각이 들었다. 

 

 

근데, O(n)으로 풀기 위해서는 hash Table이 필요했다. 

function twoSum(nums, target) {
  const numMap = new Map;
    
  for (let i = 0; i < nums.length; i++) {
    const difNum = target - nums[i];
        
    if (numMap.has(difNum)) return [numMap.get(difNum), i];

    numMap.set(nums[i], i);
  }
}