算法 - Leetcode 167.两数之和II

题目描述

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

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

解题思路

与两数之和第一版题目相比,本题给定的是一个已经按照升序排列的有序数组,对于有序数组来说,可以使用双指针来解决此题:定义一个左指针从数组起始位置开始遍历数组,定义一个右指针从数组末尾位置开始遍历数组,如果左右指针所指向的数值之和大于目标数,说明右指针在结果正确时的指针右边(因为升序数组),此时将右指针向左移动,反之则移动左指针。

实现代码(js)

/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (numbers, target) {
    
    
	// 定义左指针l 右指针r
    let l = 0, r = numbers.length - 1;
    // 要求返回值l小于r
    while (l < r) {
    
    
        if (numbers[l] + numbers[r] == target) {
    
    
        	// 如果相等则跳出循环
            return [++l, ++r]
        } else {
    
    
        	// 如果和大于target则移动右指针,反之移动左指针
            numbers[l] + numbers[r] > target ? r-- : l++;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/solitary__/article/details/109292727