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