303. 区域和检索 - 数组不可变

303. 区域和检索 - 数组不可变

leetcode 303. 区域和检索 - 数组不可变


题目:303. 区域和检索 - 数组不可变

给定一个整数数组 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

说明:

  • 你可以假设数组不可变。
  • 会多次调用 sumRange 方法。

方法:动态规划

思路:动态规划,提前对nums进行预处理,计算出从0到nums每个元素位置的总和记录到sums,查询i 到 j范围内元素的总和时只需用sums[j + 1] - sums[i]即为答案。
运行数据:执行用时:10 ms,内存消耗:41.7 MB

复杂度分析:

  • 时间复杂度:每次查询的时间复杂度为O(1),构造函数的预处理时间复杂度为O(n),n为nums的元素个数。
  • 空间复杂度:O(n),n为nums的元素个数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// LeetCode指定类
class NumArray {

private int[] sums;

public NumArray(int[] nums) {

sums = new int[nums.length + 1];
for (int i = 1; i <= nums.length; i++) {
sums[i] = sums[i - 1] + nums[i - 1];
}
}

public int sumRange(int i, int j) {
return sums[j + 1] - sums[i];
}
}

学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。

才疏学浅,若有错误或不当之处,可批评指正,还请见谅!


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×