Skip to main content

βž• 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​

Prefix Sum Flow Prefix Sum Animation


Time & Space Complexity​

OperationTimeSpace
Build prefix arrayO(n)O(n)
Range queryO(1)O(1)
Difference array updateO(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​

ProblemDifficultySolution
LC 1480 β€” Running Sum of 1D ArrayEasy
LC 303 β€” Range Sum QueryEasy
LC 560 β€” Subarray Sum Equals KMedium
LC 525 β€” Contiguous ArrayMedium
LC 304 β€” Range Sum Query 2DMedium
LC 1171 β€” Remove Zero Sum Consecutive NodesMedium
CC β€” Sumtastic (SUMTASTIC)Medium
CC β€” Chef Segment (CHSEG)Medium
LC 363 β€” Max Sum of Rectangle No Larger Than KHard
LC 930 β€” Binary Subarrays With SumMedium
LC 523 β€” Continuous Subarray SumMedium
LC 238 β€” Product of Array Except SelfMedium
LC 724 β€” Find Pivot IndexEasy
LC 1031 β€” Maximum Sum of Two Non-Overlapping SubarraysMedium
LC 1094 β€” Car PoolingMedium
LC 1109 β€” Corporate Flight BookingsMedium
LC 1248 β€” Count Number of Nice SubarraysMedium
LC 1314 β€” Matrix Block SumMedium
LC 1442 β€” Count Triplets That Can Form Two Arrays of Equal XORMedium
LC 1590 β€” Make Sum Divisible by PMedium
LC 1658 β€” Minimum Operations to Reduce X to ZeroMedium
LC 1664 β€” Ways to Make a Fair ArrayMedium
LC 1732 β€” Find the Highest AltitudeEasy
LC 1991 β€” Find the Middle Index in ArrayEasy
CC β€” Range Sum Queries (RANGESUM)Easy
CC β€” Prefix Sum Array (PREFSUM)Easy
CC β€” Subarray Queries (SUBARR)Medium

← Back to Home Β· Β© sparshjaswal