[리트코드] 167. Two Sum II - Input Array Is Sorted




167. Two Sum II - Input Array Is Sorted

리트코드

나의 풀이

/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (numbers, target) {
  for (let i = 0; i < numbers.length; i++) {
    for (let j = i + 1; j < numbers.length; j++) {
      if (numbers[i] + numbers[j] === target) return [i + 1, j + 1];
    }
  }
};

console.log(twoSum([2, 7, 11, 15], 9));

저번에 풀었던 two Sum 문제와 굉장히 유사한 문제다.
ouput 값만 index+1 해주면 끝!

나의 풀이 (two pointer로 풀기)

/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(numbers, target) {
    let left = 0, right = numbers.length - 1, sum;
    
    while (left < right) {
        sum = numbers[left] + numbers[right];
        if (sum === target) {
            return [left + 1, right + 1];
        } else if (sum > target) {
            right--;
        } else {
            left++;
        }
    }
    
    return [-1, -1];
};

첫번째 풀이는 효율성이 좋지 못하다. (O(n^2))
따라서 투포인터로 변경하여 효율성을 높여보았다.