1. Direct Array Storage
Intuition
Maintain the elements in a plain array:
- update(index, val): Directly set nums[index] = val in O(1) time.
- sumRange(left, right): Loop i from left to right accumulating the sum in O(n) time.
With up to 30,000 operations, total runtime reaches O(Q \cdot n) ≈ 9 × 108 operations, leading to Time Limit Exceeded.
When to apply: Basic prototyping when sum queries are very rare.
Algorithm
- Step 1: Store input array in nums.
- Step 2: On update(index, val), set nums[index] = val.
- Step 3: On sumRange(left, right), loop i from left to right summing nums[i] and return.
#include <iostream>#include <vector> class NumArrayBrute { std::vector<int> nums;public: NumArrayBrute(std::vector<int>& arr) : nums(arr) {} void update(int index, int val) { nums[index] = val; } int sumRange(int left, int right) { int sum = 0; for (int i = left; i <= right; ++i) sum += nums[i]; return sum; }}; int main() { std::vector<int> nums = {1, 3, 5}; NumArrayBrute na(nums); std::cout << na.sumRange(0, 2) << std::endl; na.update(1, 2); std::cout << na.sumRange(0, 2) << std::endl; return 0;}Time & Space Complexity
- Time complexity:
O(1) for update, O(n) for sumRange - Space complexity:
O(n) auxiliary space