Drill

ProblemsJavaScript › patterns

The busiest stretch of the day

mediumpatternsSliding windowArraysJavaScript

A traffic chart holds one count per minute. The headline figure is the busiest run of a fixed number of consecutive minutes.

busiestStretch(perMinute: list<int>, runLength: int) → int

Solve it in the editor →

Where you start

function busiestStretch(perMinute, runLength) {
  
}

Worked examples

CallResult
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 JavaScript
function busiestStretch(perMinute, runLength) {
  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;
}

The same problem in another language

More patterns problems in JavaScript