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

简介: LeetCode:167. 两数之和 II - 输入有序数组

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

难度中等886

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 ****非递减顺序排列 ** ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1]numbers[index2] ,则 1 <= index1 < index2 <= numbers.length


以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 **和 **index2


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

你所设计的解决方案必须只使用常量级的额外空间。


示例 1:

输入: numbers = [2,7,11,15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
复制代码


示例 2:

输入: numbers = [2,3,4], target = 6
输出: [1,3]
解释: 2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。
复制代码


示例 3:

输入: numbers = [-1,0], target = -1
输出: [1,2]
解释: -1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
复制代码


## 思路

双指针,对向移动进行搜索。sum大于target就进行右移,小于就是左移。


提示:

  • 2 <= numbers.length <= 3 * 104
  • -1000 <= numbers[i] <= 1000
  • numbers非递减顺序 排列
  • -1000 <= target <= 1000
  • 仅存在一个有效答案


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



目录
相关文章
|
3天前
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
3天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
3天前
|
算法 C语言 C++
|
3天前
leetcode代码记录(有序数组的平方
leetcode代码记录(有序数组的平方
8 0
|
3天前
leetcode代码记录(有序数组两数之和
leetcode代码记录(有序数组两数之和
13 0
|
3天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
22 0
|
3天前
|
算法
LeetCode-1:两数之和
LeetCode-1:两数之和
|
3天前
【力扣】80.删除有序数组中的重复项Ⅱ
【力扣】80.删除有序数组中的重复项Ⅱ
|
3天前
|
存储
【力扣经典面试题】80. 删除有序数组中的重复项 II
【力扣经典面试题】80. 删除有序数组中的重复项 II
|
3天前
|
存储
【力扣经典面试题】合并两个有序数组
【力扣经典面试题】合并两个有序数组