Problems › TypeScript › patterns
The busiest stretch of the day
A traffic chart holds one count per minute. The headline figure is the busiest run of a fixed number of consecutive minutes.
- The window is a run of exactly `runLength` consecutive minutes.
- If the day is shorter than the window, there is no such run: return 0.
- A window size of zero or less also returns 0.
busiestStretch(perMinute: list<int>, runLength: int) → int
Where you start
function busiestStretch(perMinute: number[], runLength: number): number {
}
Worked examples
| Call | Result |
|---|---|
busiestStretch([1,4,2,10,2,3,1,0,20], 4) | 24 |
busiestStretch([2,3], 3) | 0 |
busiestStretch([5,5,5], 1) | 5 |
busiestStretch([1,2,3], 3) | 6 |
Hint
Total the first window, then slide: add the minute coming in and subtract the one going out. Re-adding the whole window each step is the slow way.
Reference solution in TypeScript
function busiestStretch(perMinute: number[], runLength: number): number {
if (runLength <= 0 || perMinute.length < runLength) return 0;
let window = 0;
for (let i = 0; i < runLength; i += 1) window += perMinute[i];
let best = window;
for (let i = runLength; i < perMinute.length; i += 1) {
window += perMinute[i] - perMinute[i - runLength];
if (window > best) best = window;
}
return best;
}