我正在使用excercise on codewars


  给定一个整数列表和一个总和值,返回前两个
  值(请从左边开始解析),按相加顺序出现
  形成总和。
  例:


sum_pairs([10, 5, 2, 3, 7, 5],         10)
#              ^-----------^   5 + 5 = 10, indices: 1, 5
#                    ^--^      3 + 7 = 10, indices: 3, 4 *
#  * entire pair is earlier, and therefore is the correct answer
== [3, 7]


您认为整个货币对是什么意思?如果其索引的总和最小,则为IMO。现在,基于此假设,我提出了解决方案,但一项测试失败了:



    var sum_pairs=function(ints, s){
      let i = 0;
      let pair = [0, 0];
      let ind = [100, 100]
      let found = false;

      function loop(i) {
    	if (i > ints.length) return pair;
        ints.slice(i).forEach((curr, idx) => {
          ints.slice(i+1).some((num, i) => {
            let sum = curr + num;
            let prevIndicies = ind[0] + ind[1];
            if(sum === s && prevIndicies > idx + i) {
              ind = [idx, i];
              pair = [curr, num];
              found = true;
              return true;
            }
          })
        })
        i += 1;
        loop(i)
      }
      loop(0)
      if (found) {
    	 return pair
      }
      return undefined;
    }
    console.log(sum_pairs([1,4,8,7,3,15], 8))





测试返回预期为[1, 7]的错误。

最佳答案

我很确定这意味着他们希望第二个元素在列表中尽可能左移。例如,对于

l5= [10, 5, 2, 3, 7, 5];


当试图求和10时,所需的输出是

[3, 7]
[10, 5, 2, 3, 7, 5];
           ^  ^


代替

[5, 5]
[10, 5, 2, 3, 7, 5];
     ^           ^


因为[3, 7]中的最后一个元素7排在第二个5之前。

此代码似乎通过了所有测试用例-以三角方式迭代,从索引[0, 1][0, 2][1, 2][0, 3][1, 3][2, 3],...开始:

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




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

l1= [1, 4, 8, 7, 3, 15];
l2= [1, -2, 3, 0, -6, 1];
l3= [20, -13, 40];
l4= [1, 2, 3, 4, 1, 0];
l5= [10, 5, 2, 3, 7, 5];
l6= [4, -2, 3, 3, 4];
l7= [0, 2, 0];
l8= [5, 9, 13, -3];


console.log(sum_pairs(l1, 8))
console.log(sum_pairs(l2, -6))
console.log(sum_pairs(l3, -7))
console.log(sum_pairs(l4, 2))
console.log(sum_pairs(l5, 10))
console.log(sum_pairs(l6, 8))
console.log(sum_pairs(l7, 0))
console.log(sum_pairs(l8, 10))

关于javascript - Codewars JavaScript任务-帮助理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52216217/

10-09 15:07