943. Range Sum Query - Immutable
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
样例
Given nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
注意事项
- You may assume that the array does not change.
- There are many calls to
sumRangefunction。
解题思路:题目的意思是给定一个数组,然后求出给定范围内的和。第一反应当然是遍历了。
代码如下:
class NumArray {
int dp[];
public NumArray(int[] nums) {
int len = nums.length;
dp = new int[len];
for(int i=0;i<len;i++)
dp[i]=nums[i];
}
public int sumRange(int i, int j) {
if(dp == null)
return 0;
int sum = 0;
for(int pos = i;pos<=j;pos++)
sum+=dp[pos];
return sum;
}
}
运行一下:

过了,但是能不能继续进行优化呢?
答案当然是可以的,运用动态规划的知识,开辟一个数组,每个位置存的是前面和当前位置数值的累加和,用的时候直接取不就行了吗。。。
代码:
class NumArray {
int dp[];
public NumArray(int[] nums) {
int len = nums.length;
dp = new int[len];
dp[0] = nums[0];
for(int i=1;i<len;i++)
dp[i] = dp[i-1]+nums[i];
}
public int sumRange(int i, int j) {
if(dp == null)
return 0;
if(i==0)
return dp[j];
else
return dp[j]-dp[i-1];
}
}
/**
* Your NumArray object will be instantiated and called as such:
* NumArray obj = new NumArray(nums);
* int param_1 = obj.sumRange(i,j);
*/
区间求和问题优化
本文介绍了一种基于动态规划的方法来解决区间求和问题。通过预处理数组元素的累积和,实现了快速查询任意两个索引之间的元素总和,显著提高了算法效率。
689

被折叠的 条评论
为什么被折叠?



