【问题标题】:How to use javascript to get the element value to match sum?如何使用javascript获取元素值以匹配总和?
【发布时间】:2019-07-05 01:49:42
【问题描述】:

有两个数组,总和为9。

它只会返回真或假

即:

array1[1,2,4,9] sum=9 返回 false

array2[1,2,4,5] sum=9 返回真

它需要数组中的两个数字来匹配总和。

我在 JS 中的尝试:

function hasPairWithSum(arr, sum) {
    var len = arr.length;
    for(var i =0; i<len-1; i++) {
        for(var j = i+1;j<len; j++) {
            if (arr[i] + arr[j] === sum)
                return true;
        }
    }

    return false;
}

console.log(hasPairWithSum([1, 2, 4, 9], 9));

console.log(hasPairWithSum([1, 2, 4, 5], 9));

嗯,我想要一种不同的方式来达到目标​​

【问题讨论】:

标签: javascript arrays


【解决方案1】:

这是一种不同的方法,它使用 生成器函数 和递归来生成对,以及一个 includes 函数,它接受一个迭代器和一个谓词并从生成器中提取项目以针对谓词:

function* getPairs(arr) {
  if (!arr.length) return false;
  const [h, ...tail] = arr;
  for (let v of tail) {
    console.log(`[${h}, ${v}]`);
    yield [h, v];
  }
  yield* getPairs(tail);
}

function includes(iterator, predicate) {
  let result = iterator.next();
  while (!result.done) {
    if (predicate(...result.value)) {
      return true;
    }
    result = iterator.next();
  }
  return false;
}

const sumEquals = sum => (a, b) => a + b === sum;
const pairEquals = ([a, b]) => (i, j) => a === i && b === j;

console.log(includes(getPairs([2, 4, 9]), sumEquals(9)));
console.log(includes(getPairs([2, 4, 5]), sumEquals(6)));
console.log(includes(getPairs([2, 4, 5]), pairEquals([2, 5])));

【讨论】:

    【解决方案2】:

    这是一个快速的解决方案

    function twoSum(arr, S) {
    
      var hashTable = {};
    
      // check each element in array
      for (var i = 0; i < arr.length; i++) {
    
        // calculate S - current element
        var sumMinusElement = S - arr[i];
    
        // check if this number exists in hash table
        // if so then we found a pair of numbers that sum to S
        if (hashTable[sumMinusElement.toString()] !== undefined) {
          return true;
        }
    
        // add the current number to the hash table
        hashTable[arr[i].toString()] = arr[i];
    
      }
    
      // return false as default
      return false;
    
    }
    
    console.log(twoSum([3, 5, 2, -4, 8, 11], 7));

    它使用哈希表

    【讨论】:

      【解决方案3】:

      function ContainsSum(arr, sum) {
        return arr.some((n, i) => arr.some((m, x) => n + m === sum && i != x))
      }
      
      console.log(ContainsSum([1, 2, 4, 9], 9));
      console.log(ContainsSum([1, 2, 4, 5], 9));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多