持续创作,加速成长!这是我参与「掘金日新计划 · 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 练习
感谢大家阅读⭐️⭐️⭐️,如果喜欢,可以点赞或留言哟💕💕💕
后续会持续更新记录😊~~~
专栏推荐
推荐一下自己的专栏,欢迎大家收藏关注😊~