算法题

面试是真的会紧张, 面试的时候被要求写这道题,没有快速写出来就放弃了。

现在一写就写完了,想想实在是记得记录一下啊啊啊啊啊

题目:
给出一个数组,例如[1, 9, 8, 4, 5, -1, -8, 5, 2, 3, 6, 0, 0];
给出一个 目标值, 例如 5;
返回 数组中可以 计算得出 目标值的所有组合例如
[ [1, 4], [-1, 6], [2, 3] ]

以下就是我写的答案(再次崩溃,为啥面试的时候没有写出来呢啊啊啊)

const numArrry = [1, 9, 8, 4, 5, -1, -8, 5, 2, 3, 6, 0, 0];
    const targetNum = 5;
    function getResult(numArrry, targetNum) {
      const length = numArrry.length;
      // 先写边界检测
      if ( length< 2) return '非法输入';
      // 如果正好是俩项 且相加正好为目标值
      if ( length === 2 && eval(numArrry.join("+")) === targetNum) {
        return [numArrry];
      }
      // 如果正好是俩项 且相加不为目标值 直接返回空,无需进行计算
      if ( length === 2 && eval(numArrry.join("+")) !== targetNum) {
        return [];
      }
      // 以上情况都不是进行判断
      let outPut = [];
      numArrry.forEach((el, index) => {
        const leftNum = numArrry.filter(i => i === targetNum - el)[0];
        const idx = numArrry.findIndex(i => i === targetNum - el);
        const stringArr = outPut.toString(); // 数组拉平
        if ( !isNaN(leftNum) &&  idx !== index && stringArr.indexOf(leftNum) === -1) {
          outPut.push([el, leftNum]);
        }
      })
      // !isNaN(leftNum) 是防止 0 的结果 判断不到
      // stringArr.indexOf(leftNum) === -1 是为了重复, 例如结果是 [1, -1] 与 [-1, 1]
      return outPut;
    }
    const result = getResult(numArrry, targetNum);
    console.log(result); // [[1, 4], [5, 0], [-1, 6], [2, 3]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值