我需要创建一个方法,在给定组大小的情况下,找到数组中连续条目的最大和。它应该以{{1}}和间隔大小作为输入,并且应该返回组中第一个条目的最大总和和索引。
例如,在以下array
中,如果组大小为Array [1,1,1,1,1,1,1,2]
,则结果将是3的最大总和和6的位置。
如何完成这个?
谢谢!
答案 0 :(得分:2)
由于您没有发布任何代码,我的回答将是一般性的。
最简单的方法是遍历数组并找到当前数字的总和,其中n个连续数字,直到currentDigitIndex< = array.length -n,在这个循环中你应该将currentDigitSum与currentMaxSum进行比较并存储哪个currentMaxSum中的值更大(也存储maxSumPositionIndex)。
在解决这个问题的同时,您应该考虑以下内容:如果数组长度等于1或0,如果数组具有负整数,如果组大小将大于数组长度,如果您的数组有2或3个同样大的金额......
答案 1 :(得分:0)
这是我想出的答案。它适用于MOST场景,而不是全部,因此可以改进答案。
Array.prototype.maxGroupOf = function (size) {
max = -Infinity;
indexSpot = 0;
len = this.length - size + 1;
add = function (x, y) {
return x + y;
};
this.forEach(function (x, y) {
if (y > len) return;
b = this.slice(y, y + size).reduce(add, 0);
if (b > max) {
max = b;
indexSpot = y;
}
}, this);
return {
sum: max,
position: indexSpot
};
};
console.log([1, 1, 1, 1, 1, 1, 1, 2].maxGroupOf(2));
---Output---
Object {sum: 3, position: 6}