Javascript 如何在不重复求和元素的情况下对数组进行多次迭代

Javascript 如何在不重复求和元素的情况下对数组进行多次迭代,javascript,arrays,loops,Javascript,Arrays,Loops,我试图解决这个问题,但我不知道为什么我不能通过所有的测试用例。我需要一些帮助和解释,如何将一些数组(在本例中为变量s)计数多次,而不重复我已经求和的相同元素 问题描述: 莉莉有一块巧克力棒,她想和罗恩分享给他 生日。每个正方形上都有一个整数。她决定 共享选定条的连续段,以便 该段匹配Ron的出生月份和上的整数之和 正方形等于他的生日。你必须确定有多少 她分巧克力的方法 将巧克力棒视为一个正方形数组,s=[2,2,1,3,2]。 她想找到罗恩出生日的分段总和,d=4 长度等于他的出生月份,m=2。

我试图解决这个问题,但我不知道为什么我不能通过所有的测试用例。我需要一些帮助和解释,如何将一些数组(在本例中为变量s)计数多次,而不重复我已经求和的相同元素

问题描述:

莉莉有一块巧克力棒,她想和罗恩分享给他 生日。每个正方形上都有一个整数。她决定 共享选定条的连续段,以便 该段匹配Ron的出生月份和上的整数之和 正方形等于他的生日。你必须确定有多少 她分巧克力的方法

将巧克力棒视为一个正方形数组,
s=[2,2,1,3,2]
。 她想找到罗恩出生日的分段总和,
d=4
长度等于他的出生月份,m=2。在这种情况下,有两个 符合她的标准的片段:
[2,2]
[1,3]

功能描述

在下面的编辑器中完成生日功能。它应该会回来 一个整数,表示莉莉可以分割巧克力的方式 酒吧

生日具有以下参数:

s:一个整数数组,每个整数平方上的数字 巧克力, d:整数,罗恩的出生日,m:整数,罗恩的出生月

我的代码:

function birthday(s, d, m) {
    let bars = 0;

    if (m !== 1) {
        s.reduce((acc, val) => (acc+val) === d ? ++bars : bars)
    } else {
        bars = 1;
    }

    return bars;
}
有些情况:

  • s=[2,5,1,3,4,4,3,5,1,1,2,1,4,1,3,3,4,2,1]

  • d=18

  • m=7

  • s=[4,5,4,5,1,2,1,4,3,2,4,4,3,5,2,2,5,4,3,2,3, 5,2,1,5,2,3,1,2,3,3,1,2,5]

  • d=18

  • m=6

  • s=[4,5,4,2,4,5,2,3,2,1,1,5,4]

  • d=15

  • m=4

我的代码适用于以下内容:

  • s=[1,2,1,3,2]
  • d=3
  • m=2

这可以在HackerRank>Practice>Algorithms>Implementation

上找到,只要您在数组上循环以获得求和或对其执行数学方程,并且您必须删除已计算的特定元素,您可以使用其中一个内置函数,使用特定索引从数组中删除元素。
&&

您只需使用
m
的切片长度对数组进行切片,然后将其与
d

作为
切片

slice()。原始数组将不会被修改

例如:

s = [1, 2, 1, 3, 2]
m = 2 
d = 3

// We loop through s with index stop at s.length - m + 1 for slice to be in correct range

// Slices:
i=0: [1, 2] -> sum=3 -> res=0+1=1
i=1: [2, 1] -> sum=3 -> res=1+1=2
i=2: [1, 3] -> sum=4 -> do nothing
i=4: [3, 2] -> sum=5 -> do nothing
 
下面是一个有效的解决方案

功能生日(s、d、m){
设res=0
常数和=(arr)=>arr.reduce((acc,el)=>acc+el,0)
对于(设i=0;i

这里有一种简单易懂的嵌套循环方法:

功能生日(s、d、m){
var matches=0;//找到的匹配总数
//查看从位置0开始的块。最后一个块不能超过数组末尾的m个点,所以最后一个块从1+s开始。长度-m:
对于(设i=0;i<1+s.length-m;i++){
var sum=0;//此块的总和
//总结此区块的值:
for(设j=0;j
我可以假设s数组在添加之前无法排序,或者我们可以在添加之前排序吗?我猜它可以排序。关键是要将s的元素和等于d,并且,从问题描述中可以看出,被和为d的元素的数量是m,听起来不允许对数组进行排序。