Drill

ProblemsGo › patterns

The busiest stretch of the day

mediumpatternsSliding windowArraysGo

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

Go needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.

Solve it in Python →

Where you start

func busiestStretch(perMinute []int, runLength int) int {
	
}

Worked examples

CallResult
busiestStretch([]int{1, 4, 2, 10, 2, 3, 1, 0, 20}, 4)24
busiestStretch([]int{2, 3}, 3)0
busiestStretch([]int{5, 5, 5}, 1)5
busiestStretch([]int{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 Go
func busiestStretch(perMinute []int, runLength int) int {
	if runLength <= 0 || len(perMinute) < runLength {
	    return 0
	}
	window := 0
	for i := 0; i < runLength; i++ {
	    window += perMinute[i]
	}
	best := window
	for i := runLength; i < len(perMinute); i++ {
	    window += perMinute[i] - perMinute[i-runLength]
	    if window > best {
	        best = window
	    }
	}
	return best
}

The same problem in another language

More patterns problems in Go