Drill

ProblemsJava › patterns

How many stretches add up to the figure

hardpatternsPrefix sumsHash mapsArraysJava

An investigator looks through a list of movements for every unbroken stretch that comes to a particular amount.

stretchesTotalling(movements: list<int>, target: int) → int

Java 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 stretchesTotalling(List<Integer> movements, int target) {
    
}

Worked examples

CallResult
stretchesTotalling(Main.<Integer>ls(1, 1, 1), 2)2
stretchesTotalling(Main.<Integer>ls(1, 2, 3), 3)2
stretchesTotalling(Main.<Integer>ls(1, -1, 0), 0)3
stretchesTotalling(Main.<Integer>ls(), 0)0

Hint

If the running total at two points differs by the target, the stretch between them is a hit. Keep a count of every running total you have seen and look up total minus target.

Reference solution in Java
int stretchesTotalling(List<Integer> movements, int target) {
    Map<Integer, Integer> seen = new HashMap<>();
    seen.put(0, 1);
    int running = 0, hits = 0;
    for (int movement : movements) {
        running += movement;
        hits += seen.getOrDefault(running - target, 0);
        seen.merge(running, 1, Integer::sum);
    }
    return hits;
}

The same problem in another language

More patterns problems in Java