Drill

ProblemsGo › patterns

How many readings fall in the band

mediumpatternsBinary searchArraysGo

A sorted column of measurements is checked against a tolerance band, and the report wants the count inside it — over millions of rows, so scanning is out.

countInBand(readings: list<int>, low: int, high: 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 countInBand(readings []int, low int, high int) int {
	
}

Worked examples

CallResult
countInBand([]int{1, 3, 5, 7, 9}, 3, 7)3
countInBand([]int{1, 3, 5, 7, 9}, 4, 4)0
countInBand([]int{2, 2, 2, 2}, 2, 2)4
countInBand([]int{1, 2, 3}, 3, 1)0

Hint

Two binary searches: the first position not below the low end, and the first position above the high end. The gap between them is the answer.

Reference solution in Go
func countInBand(readings []int, low int, high int) int {
	if low > high {
	    return 0
	}
	lowerBound := func(target int) int {
	    lo, hi := 0, len(readings)
	    for lo < hi {
	        mid := (lo + hi) / 2
	        if readings[mid] < target {
	            lo = mid + 1
	        } else {
	            hi = mid
	        }
	    }
	    return lo
	}
	return lowerBound(high+1) - lowerBound(low)
}

The same problem in another language

More patterns problems in Go