/**
* Result returned by findMaxSumOfThree().
*/
interface MaxSumResult {
maxSum: number;
startIndex: number;
numbers: number[];
}
/**
* Finds the consecutive numbers with the largest sum.
*
* @param numbers Array of integers.
* @param windowSize Number of consecutive values to examine.
* @returns Information about the largest-sum sequence.
*/
function findMaxSumOfThree(
numbers: number[],
windowSize: number
): MaxSumResult {
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: number = 0;
for (let i: number = 0; i < windowSize; i++) {
currentSum += numbers[i];
}
let maxSum: number = currentSum;
let bestStartIndex: number = 0;
// Slide the window through the array.
for (
let i: number = windowSize;
i < numbers.length;
i++
) {
// Add the incoming value and remove the outgoing value.
currentSum += numbers[i];
currentSum -= numbers[i - windowSize];
if (currentSum > maxSum) {
maxSum = currentSum;
bestStartIndex = i - windowSize + 1;
}
}
return {
maxSum,
startIndex: bestStartIndex,
numbers: numbers.slice(
bestStartIndex,
bestStartIndex + windowSize
)
};
}
// Example data
const numbers: number[] = [4, 2, 0, 8, 7, 5, 1, 3, 9, 6];
// Example usage
const result: MaxSumResult = findMaxSumOfThree(numbers, 3);
console.log(`Largest sum: ${result.maxSum}`);
console.log(`Numbers: ${result.numbers.join(" ")}`);
/*
run:
Largest sum: 20
Numbers: 8 7 5
*/