β Prefix Sum
One-line summary: Pre-compute cumulative sums so any range query
sum(L..R)is answered in O(1) after O(n) preprocessing.
Conceptβ
Build a prefix sum array p where p[i] = arr[0] + arr[1] + ... + arr[i].
Range sum [L, R] = p[R] - p[L-1] (with p[-1] = 0)
Difference array is the inverse: apply range updates in O(1), read values in O(n).
Diagramβ
Time & Space Complexityβ
| Operation | Time | Space |
|---|---|---|
| Build prefix array | O(n) | O(n) |
| Range query | O(1) | O(1) |
| Difference array update | O(1) | O(n) |
Common Patternsβ
Basic Prefix Sumβ
function buildPrefix(arr) {
const p = new Array(arr.length + 1).fill(0);
for (let i = 0; i < arr.length; i++) p[i + 1] = p[i] + arr[i];
return p;
}
function rangeSum(p, l, r) { return p[r + 1] - p[l]; }
Subarray Sum Equals K (hash map + prefix)β
function subarraySum(nums, k) {
const map = new Map([[0, 1]]);
let count = 0, sum = 0;
for (const n of nums) {
sum += n;
count += (map.get(sum - k) || 0);
map.set(sum, (map.get(sum) || 0) + 1);
}
return count;
}
Pitfallsβ
- Off-by-one: use 1-indexed prefix array to avoid
p[-1]issues - 2D prefix sum: remember the inclusion-exclusion formula
Practice Problemsβ
Related Topicsβ
- Hashing β hash map powers subarray sum = K
- Kadane's Algorithm β complementary
- Sliding Window
β Back to Home Β· Β© sparshjaswal