A dynamic window expands and contracts over an array/string to maintain a running state in O(N) time.
array = [2, 1, 3, 4, 5, 2, 1, 7]
start end
| |
+---+---+---+---+---+---+---+---+
| 2 | 1 | 3 | 4 | 5 | 2 | 1 | 7 |
+---+---+---+---+---+---+---+---+
| <----------- window ----------->|
expand end one step at a time
shrink start when constraint violated
start = 0, answer = ....end in range(N): add arr[end]. While constraint violated, subtract arr[start] and start += 1. Record answer.def max_sum_subarray_k(arr, k):
cur = sum(arr[:k])
best = cur
for end in range(k, len(arr)):
cur += arr[end] - arr[end - k]
best = max(best, cur)
return best
end but forgetting to shrink start -> O(N*K) by accident.end - k + 1 for window length.A 60-second timeline in a video editor: scrub forward (end++) or trim from the start (start++).
Interview tip: State out loud: expand until invalid, shrink until valid, record answer. Repeat this catchphrase whenever the constraint changes.