题目详情:
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
解题思路:
首先,定义两个指针 left 和 right,分别指向数组的最左端和最右端。
然后,我们计算指针所指元素的和 sum。如果 sum 等于 target,则找到了符合条件的一对数字,即 nums[left] 和 nums[right],将它们作为结果返回。
如果 sum 小于 target,说明当前的和太小了,我们需要增大和,为了达到这个目标,我们将 left 指针向右移动一位。
如果 sum 大于 target,说明当前的和太大了,我们需要减小和,为了达到这个目标,我们将 right 指针向左移动一位。
重复上述步骤,直到找到一对数字的和等于 target,或者指针相遇(即 left 大于等于 right),此时说明数组中不存在满足条件的数字对,返回一个空数组。
代码实现:
function twoSum(nums, target) {
let left = 0;
let right = nums.length - 1;
while (left < right) {
const sum = nums[left] + nums[right];
if (sum === target) {
return [nums[left], nums[right]];
} else if (sum < target) {
left++;
} else {
right--;
}
}
return [];
}
// 示例输入
const nums = [2, 7, 11, 15];
const target = 9;
// 调用函数并输出结果
console.log(twoSum(nums, target));