Skip to content

Latest commit

 

History

History
39 lines (36 loc) · 1.32 KB

167-两数之和II-输入有序数组.md

File metadata and controls

39 lines (36 loc) · 1.32 KB

题目描述

两数之和II-输入有序数组

题目简述

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

函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

分类

简单 双指针

思路

遍历

/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(numbers, target) {
  let startIndex = 0;
  let endIndex = numbers.length - 1
  while (startIndex < endIndex) {
    if (numbers[startIndex] + numbers[endIndex] > target) {
      endIndex --
    } else if (numbers[startIndex] + numbers[endIndex] < target) {
      startIndex ++
    } else {
      return [startIndex + 1, endIndex + 1]
    }
  }
};
  • 问题分析
    • 因为numbers是递增的,所以我们将两个数从首尾开始向中间收拢,每次去比较两个值之和与target,如果和更大则将右值向左收拢,反之左值向右。