编写sum_pairs函数的更简单方法

时间:2019-01-10 14:17:39

标签: javascript

我希望有人给我展示一种更简单的方式来编写我的sum_pairs(arr,sum)函数,该函数返回arr中的前两个值,其值总计为sum。我的代码有效,但我认为它很复杂,我需要有人对其进行简化。所以,这是我的代码。

function sum_pairs(ints,s){
 let arr=[];
 let arrOfIndex=[];
 for(let i=0;i<ints.length;i++){
  for(let a=0;a<ints.length;a++){
   if(a!=i){
    if(ints[i]+ints[a]==s){
     let newArr=[ints[i],ints[a]];
     let sumIndex=i+a;
     arr.push(newArr);
     arrOfIndex.push(sumIndex);
    }
   }
  } 
 }
 let sortedArray=arrOfIndex.sort((a,b)=>a-b);
 return arr[arrOfIndex.indexOf(sortedArray[0])];
}

console.log(sum_pairs([7,2,5,8,4,3],7))//[2,5]

3 个答案:

答案 0 :(得分:4)

您可以对第二对对元素进行哈希表的单循环。

它通过查找实际值来工作,如果找到该值,则该值是对的一部分。在这种情况下,返回和值与值和值的差值。

如果未找到,请向哈希表中添加一个缺少值的新条目以求和。

继续直到找到或结束。

function sum_pairs(ints, s) {
    var hash = Object.create(null),
        i,
        value;

    for (i = 0; i < ints.length; i++) {
        value = ints[i];
        if (hash[value]) return [s - value, value];
        hash[s - value] = true;
    }
}

console.log(sum_pairs([7, 2, 5, 8, 4, 3], 7));

所有对(具有不重复的数组)

function allPairs(ints, s) {
    var hash = Object.create(null),
        i,
        value,
        pairs = [];

    for (i = 0; i < ints.length; i++) {
        value = ints[i];
        if (hash[value]) pairs.push([s - value, value]);
        hash[s - value] = true;
    }
    return pairs;
}

console.log(allPairs([7, 2, 5, 8, 4, 3], 7));

最后也找到重复的对:-)

function allPairs(ints, s) {
    var hash = Object.create(null),
        i,
        value,
        pairs = [];

    for (i = 0; i < ints.length; i++) {
        value = ints[i];
        if (hash[value]) {
            pairs.push([s - value, value]);
            hash[value]--;
            continue;
        }
        if (!hash[s - value]) {
            hash[s - value] = 0;
        }
        ++hash[s - value];
    }
    return pairs;
}

console.log(allPairs([4, 3, 3, 4, 7, 2, 5, 8, 3], 7));

答案 1 :(得分:2)

您可以使用以下代码

function sum_pairs(ints, s) {
  let results = [];
  for (let i=0; i<ints.length; i++) {
    for (let j=i+1; j<ints.length; j++) {
      if (ints[j] === s - ints[i]) {
        results.push([ints[i], ints[j]])
      }
    }
  }
  return results;
}

这将为您提供所有的配对

要返回一对,可以使用以下

function sum_pairs(ints, s) {
      let results = [];
      for (let i=0; i<ints.length; i++) {
        for (let j=i+1; j<ints.length; j++) {
          if (ints[j] === s - ints[i]) {
            results.push([ints[i], ints[j]])
             return results;
          }
        }
      }
    }

答案 2 :(得分:2)

步骤

  1. 遍历数组
  2. 使用此公式n_composition = sum - n查找n的组成(n是每个交互中的数字)
  3. 在数组中搜索n_composition
  4. 如果找到,则返回[n,n_comp]。如果不是,则继续循环。如果根本找不到,则返回null。

let n = 0;
let n_comp = 0;
let sum_pairs = (arr, sum) => {
  for(let i = 0, len = arr.length; i < len; ++i){
    n = arr[i];
    n_comp = sum - n;
    if (arr.includes(n_comp)){
      return [n, n_comp];
    }
  }
  return null;
}

console.log(sum_pairs([7,2,5,8,4,3],7))//[2,5]