Prefix Sum Array

Concept Overview


Detailed Explanation


Code Examples

    public class PrefixSumExample {

        // Method to build the prefix sum array
        public static int[] buildPrefixSumArray(int[] arr) {
            int n = arr.length;
            int[] prefixSum = new int[n];
            if (n > 0) {
                prefixSum[0] = arr[0];
                for (int i = 1; i < n; i++) {
                    prefixSum[i] = prefixSum[i - 1] + arr[i];
                }
            }
            return prefixSum;
        }

        // Method to get sum of elements from index i to j
        public static int getRangeSum(int[] prefixSum, int i, int j) {
            if (i > j || i < 0 || j >= prefixSum.length) {
                throw new IllegalArgumentException("Invalid range.");
            }
            if (i == 0) {
                return prefixSum[j];
            } else {
                return prefixSum[j] - prefixSum[i - 1];
            }
        }

        public static void main(String[] args) {
            int[] arr = {10, 20, 30, 40, 50};
            
            // 1. Build prefix sum array
            int[] prefixSum = buildPrefixSumArray(arr);
            // prefixSum will be {10, 30, 60, 100, 150}
            
            System.out.println("Original array: " + java.util.Arrays.toString(arr));
            System.out.println("Prefix sum array: " + java.util.Arrays.toString(prefixSum));
            
            // 2. Query for a range sum
            int startIdx = 1;
            int endIdx = 3;
            int sum = getRangeSum(prefixSum, startIdx, endIdx); // Sum of {20, 30, 40}
            System.out.println("Sum from index " + startIdx + " to " + endIdx + ": " + sum); // Output: 90
        }
    }

Diagrams


Example:

Array Data: -3 6 2 4 5 2 8 -9 3 1
Index: 0 1 2 3 4 5 6 7 8 9
Prefix-Sum Array: -3 3 5 9 14 16 24 15 18 19


Real-World Applications


Advantages & Drawbacks



Trade-offs



Best Practices


Interview Angle



Coding problems


Online References


Summary


Extra Insights


Go to Home

------- End -------