Range Sum Query - Immutable
Solution 1: Brute Force
Java Code
class NumArray {
int[] nums;
public NumArray(int[] nums) {
this.nums = nums;
}
public int sumRange(int left, int right) {
int sum = 0;
for(int i = left; i <= right; i++) {
sum += nums[i];
}
return sum;
}
}
C++ Code
class NumArray {
vector<int> nums;
public:
NumArray(vector<int>& nums) {
this->nums = nums;
}
int sumRange(int left, int right) {
int sum = 0;
for (int i = left; i <= right; i++) {
sum += nums[i];
}
return sum;
}
};
Python Code
class NumArray:
def __init__(self, nums: List[int]):
self.nums = nums
def sumRange(self, left: int, right: int) -> int:
sum_ = 0 # sum is a keyword in Python, so using sum_
for i in range(left, right + 1):
sum_ += self.nums[i]
return sum_
Complexity Analysis
Time Complexity: O(N^2), where N is the length of the given array nums
.
Space Complexity: O(1)
Solution 2: Prefix Sum
Java Code
class NumArray {
int[] prefixSum;
public NumArray(int[] nums) {
prefixSum = new int[nums.length];
prefixSum[0] = nums[0];
for(int i = 1; i < nums.length; i++) {
prefixSum[i] = prefixSum[i - 1] + nums[i];
}
}
public int sumRange(int left, int right) {
if(left == 0) {
return prefixSum[right];
}
return prefixSum[right] - prefixSum[left - 1];
}
}
C++ Code
class NumArray {
vector<int> prefixSum;
public:
NumArray(vector<int>& nums) {
prefixSum.resize(nums.size());
prefixSum[0] = nums[0];
for (int i = 1; i < nums.size(); i++) {
prefixSum[i] = prefixSum[i - 1] + nums[i];
}
}
int sumRange(int left, int right) {
if (left == 0) {
return prefixSum[right];
}
return prefixSum[right] - prefixSum[left - 1];
}
};
Python Code
class NumArray:
def __init__(self, nums: List[int]):
self.prefixSum = [0] * len(nums)
self.prefixSum[0] = nums[0]
for i in range(1, len(nums)):
self.prefixSum[i] = self.prefixSum[i - 1] + nums[i]
def sumRange(self, left: int, right: int) -> int:
if left == 0:
return self.prefixSum[right]
return self.prefixSum[right] - self.prefixSum[left - 1]
Complexity Analysis
Time Complexity: O(N), where N is the length of the given array nums
.
Space Complexity: O(N), for building prefixSum
array.