# 剑指 Offer 57. 和为s的两个数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
示例 2:
输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
双指针
- 递增数组
- 时间复杂度O(n)
- 空间复杂度O(1)
var twoSum = function (nums, target) {
let i = 0;
let j = nums.length - 1;
while (i < j) {
if (nums[i] + nums[j] > target) {
// 两数之和大于目标值,则减少较大值
j--;
} else if (nums[i] + nums[j] < target) {
// 两数之和小于目标值,则增加较小值
i++;
} else {
return [nums[i], nums[j]]
}
}
};
暴力搜索
!!! 超长数据下直接超时
- 时间复杂度O(n^2)
- 空间复杂度O(n)
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
const dif = target - nums[i];
if (nums.includes(dif)) {
return [nums[i], dif]
}
}
};