Drill

ProblemsC++ › patterns

How often the load crossed the line

mediumpatternsSliding windowArraysC++

Capacity planning counts how many fixed-length stretches of the day carried at least a given amount of work.

windowsOverLimit(load: list<int>, runLength: int, limit: int) → int

C++ 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

int windowsOverLimit(std::vector<int> load, int runLength, int limit) {
    
}

Worked examples

CallResult
windowsOverLimit(std::vector<int>{1, 2, 3, 4, 5}, 2, 5)3
windowsOverLimit(std::vector<int>{1, 1, 1}, 2, 10)0
windowsOverLimit(std::vector<int>{5, 5, 5}, 1, 5)3
windowsOverLimit(std::vector<int>{1, 2}, 3, 1)0

Hint

Slide one total across the list rather than re-summing each window, and test it at every stop.

Reference solution in C++
int windowsOverLimit(std::vector<int> load, int runLength, int limit) {
    if (runLength <= 0 || static_cast<int>(load.size()) < runLength) return 0;
    int window = 0;
    for (int i = 0; i < runLength; i++) window += load[i];
    int hits = window >= limit ? 1 : 0;
    for (size_t i = runLength; i < load.size(); i++) {
        window += load[i] - load[i - runLength];
        if (window >= limit) hits++;
    }
    return hits;
}

The same problem in another language

More patterns problems in C++