/**
* Finds the consecutive numbers with the largest sum.
*
* @param {number[]} numbers - Input array of integers.
* @param {number} windowSize - Number of consecutive values to examine.
* @returns {{
* maxSum: number,
* startIndex: number,
* numbers: number[]
* }}
*/
function findMaxSumOfThree(numbers, windowSize) {
if (!Array.isArray(numbers)) {
throw new TypeError("numbers must be an array");
}
if (windowSize < 1 || windowSize > numbers.length) {
throw new RangeError(
"windowSize must be between 1 and the array length"
);
}
// Calculate the first window sum
let currentSum = 0;
for (let i = 0; i < windowSize; i++) {
currentSum += numbers[i];
}
let maxSum = currentSum;
let bestStartIndex = 0;
// Slide the window through the array
for (let i = windowSize; i < numbers.length; i++) {
currentSum += numbers[i]; // add incoming value
currentSum -= numbers[i - windowSize]; // remove outgoing value
if (currentSum > maxSum) {
maxSum = currentSum;
bestStartIndex = i - windowSize + 1;
}
}
return {
maxSum,
startIndex: bestStartIndex,
numbers: numbers.slice(
bestStartIndex,
bestStartIndex + windowSize
)
};
}
// Example data
const numbers = [4, 2, 0, 8, 7, 5, 1, 3, 9, 6];
// Example usage
const result = findMaxSumOfThree(numbers, 3);
console.log(`Largest sum: ${result.maxSum}`);
console.log(`Numbers: ${result.numbers.join(" ")}`);
/*
run:
Largest sum: 20
Numbers: 8 7 5
*/