javascript - Codewars javascript 任务 - 帮助理解

标签 javascript

我正在接受excercise on codewars :

Given a list of integers and a single sum value, return the first two values (parse from the left please) in order of appearance that add up to form the sum. Example:

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 之前。

此代码似乎通过了所有测试用例 - 以三 Angular 形方式迭代,从索引 [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/

相关文章:

javascript - 如何让我的图片幻灯片显示在标题后面

javascript - backbone.js 模型指向嵌套模型的相同实例

javascript - JSON 用户搜索

javascript - 如果该 div 上没有事件发生,则在一段时间后隐藏该 div

javascript - AWS 无服务器和 javascript - 它安全吗?

javascript - 从 Steam api 获取正面和负面评论

javascript - 如何在新标签页上的 Chrome 扩展程序中从多功能框中窃取焦点?

javascript - ng-model 在表单中设置日期

javascript - 移动菜单打开时 body 的滚动锁定不起作用

javascript - rails link_to :remote