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

95 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

学习过程中将笔记整理跟大家分享,希望对大家也有所帮助,共同成长进步💪~
如果大家喜欢,可以点赞或留言💕~~~~,谢谢大家⭐️⭐️⭐️~~~

题目:两数之和 II - 输入有序数组

给你一个下标从 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] 。

提示:

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

解题代码和思路如下:

/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
//第一种方法
const twoSum = (numbers, target) => {
  let [p1, p2] = [0, numbers.length - 1];
  while (p1 < p2) {
    const minus = numbers[p1] + numbers[p2] - target;
    if (minus === 0) return [p1 + 1, p2 + 1];
    minus < 0 ? p1++ : p2--;
  }
};
//第二种方法
// var twoSum = function(numbers, target) {
//     const map = new Map();
//     for(let i=0;i<numbers.length;i++) {
//         if(map.has(target-numbers[i])){
//             return [map.get(target-numbers[i])+1,i+1]
//         }
//         else {
//             map.set(numbers[i],i);
//         }
//     }
//     return -1;
// };

点击前往 LeetCode 练习

感谢大家阅读⭐️⭐️⭐️,如果喜欢,可以点赞或留言哟💕💕💕
后续会持续更新记录😊~~~

专栏推荐

推荐一下自己的专栏,欢迎大家收藏关注😊~

近期热门文章