排序数组中两个数字之和

题目

剑指 Offer II 006. 排序数组中两个数字之和

给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。

思路

跟力扣第一题两数之和基本一样,这里是升序排列

可以通过哈希表或者双指针解答

代码

1. 哈希表

/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (numbers, target) {
  const map = {};
  for (let i = 0; i < numbers.length; i++) {
    if (map[target - numbers[i]] !== undefined) {
      return [map[target - numbers[i]], i];
    } else {
      map[numbers[i]] = i;
    }
  }
};

2. 双指针法

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

  while (i < j) {
    if (numbers[i] + numbers[j] === target) {
      return [i, j];
    } else if (numbers[i] + numbers[j] > target) {
      j--;
    } else {
      i++;
    }
  }
};