算法 | 两数之和 II - 输入有序数组-题号167

146 阅读1分钟

跳转至LeetCode

题目描述

image.png

代码

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

解析

解法一:字典

解法二:双指针

  • 1.左指针指向第一个元素,右指针指向最后一个元素,注意数组是升序排列的;
  • 2.左右指针两数相加,如果两数之和小于目标元素,则左指针后移
  • 3.如果两数之和大于目标元素,则右指针前移