算法:数组中寻找两个数字的和等于固定值

数组中寻找两个数字的和等于固定值

下面为实现思路及代码 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~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值