题目描述:
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。
示例:
给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange() sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3
解题思路:用O(n)的复杂度去构建sum数组,换取O(1)的复杂度直接得到[i,j]范围和
class NumArray {
//定义一个sum数组,每位存储nums[0,1,2...i-1]之和
private int[] sum;
public NumArray(int[] nums) {
sum = new int[nums.length+1];//长度多定义一位存放所有位之和
sum[0] = 0;//初始化sum[0]为0
for(int i = 1;i<sum.length;i++){
sum[i]=sum[i-1]+nums[i-1];
}
}
public int sumRange(int i, int j) {
return sum[j+1] - sum[i];
}
}