数组中寻找两个数字的和等于固定值
下面为实现思路及代码 codes
。
// 思路
// 先进后出 两端逼近
// for example x + y = z 前置条件:z的值固定
// 故x固定 则y也必然固定
// 依照min + max = z
// 使用两个指针分别指向第一个和最后一个 循环遍历
// 首位整数 + 尾部整数 != z
// 则删除尾部按照条件继续循环👆
// 当符合 min + max = z 时,删除首位判断下一次循环中的首位
// 此时时间复杂度为....
//
/**
* @description 我觉得写的已经挺好理解了😄, 但是总感觉这种方法不是最优
* @description 如有问题希望大佬们指出,能给出最优方法最好哈哈哈哈🤭
*/
const findByVal = fixNum => {
let css = [1,2,3,5,31,4,8,9,31,65,48,13,4,2,1,5,6,3,1,4,9,8,4,3,1,8,7,5,6,1,45,6,78,3,1,89,6,0]
// 排序+去重
css = [...new Set(css.sort((a, b) => a - b))]
while(css.length>0){
// 指向第一个
let left = css[0]
// 指向最后一个且删除
let right = css.pop()
// 符合条件则 进行输出且删除首位
if(left + right === fixNum){
console.log(left,'+',right,'=',fixNum);
css.shift()
}
}
}
findByVal(8)
findByVal(7)
findByVal(6)
thank u for coming~