法1:前缀和
参考:灵茶山艾府
Python
class NumArray:
def __init__(self, nums: List[int]):
s = [0] * (len(nums) + 1) # s[i]表示nums中前i个数之和
for i, val in enumerate(nums):
s[i+1] = s[i] + val
self.s = s
def sumRange(self, left: int, right: int) -> int:
return self.s[right+1] - self.s[left]
# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)
Java
class NumArray {
private int[] preSumArray;
public NumArray(int[] nums) {
preSumArray = new int[nums.length + 1];
for (int i = 1; i < nums.length + 1; ++i) {
preSumArray[i] = preSumArray[i - 1] + nums[i - 1];
}
}
public int sumRange(int left, int right) {
return preSumArray[right + 1] - preSumArray[left];
}
}