转自:(https://www.cxyxiaowu.com/21606.html)
没事干自己写了写;
来看看描述:
输入一个递增排序的数组和一个数字 target,在数组中查找两个数,使得它们的和正好是 target 。
如果有多对数字的和等于 target ,则输出任意一对即可。
比如,输入 nums = [2,7,11,15], target = 9。
输出为 [2,7] 或者 [7,2]。
这题比两数之和额外增加了一个条件,数组是递增有序的,这就极大的降低了求解难度。
既然需要找出两个数,使得它们的和等于 target,那么一开始我就先去随便找两个数。
那随便找哪两个数呢?
一头和一尾
let nums = [2,7,11,15]
let target = 9
// 取出任意一组满足target的值;
let getNums = (arr, count) => {
let left = 0
let right = arr.length - 1
let res = [];
while(left < right) {
let sum = arr[left] + arr[right]
if(sum < target) {
left++
} else if (sum > target) {
right --
} else {
res.push(arr[left],arr[right])
return res
}
}
return res
}
// 运行
getNums(nums, target)
// [2, 7]
// 瞎改下规则试试
let nums = [2,7,1,8,11,15, 0,2,13,5,6,88,9,5,4]
let target = 9
// 取出所有可组合的值;
let getNum = (arr, count) => {
let res = []
arr.reduce((pre, cur) => {
let a = []
let isCount = arr.some(i => {
if (cur < target && (i + cur) === target) {
a.push([cur, i])
return true
} else {
return false
}
})
if (cur < target && isCount) {
res.push(a)
}
return cur
}, 0)
return res
}
// 运行
getNum(nums, target)
// [[2,7],[7,2],[1,8],[8,1],[0,9],[2,7],[5,4],[5,4],[4,5]]