原文:167. 两数之和 II - 输入有序数组(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-0167/

题目:

难度:Easy

相关话题:数组双指针二分查找

给定一个已按照**升序排列 ** 的有序数组,找到两个数使得它们相加之和等于目标数。

函数应该返回这两个下标值** index1 和 index2,其中 index1必须小于index2

说明:

  • 返回的下标值(index1 和 index2)不是从零开始的。

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

示例:

输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(numbers, target) {
    let helper=[],index,index2
    for(let i=0;i<numbers.length;i++){
        let cur=numbers[i]
        if(helper[cur]!==undefined){
            if(target-cur>cur){
                index=i
                index2=helper[cur]
            }else{
                index2=i
                index=helper[cur]
            }
            break
        }
        else helper[target-cur]=i
    }
   return [index+1,index2+1]
};

扩展阅读: