题目

给定一个整数数组 nums,处理以下类型的多个查询:
计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right
实现 NumArray 类:
NumArray(int[] nums) 使用数组 nums 初始化对象
int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + nums[left + 1] + … + nums[right] )
示例 1:
输入:
[“NumArray”, “sumRange”, “sumRange”, “sumRange”]
[[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]]
输出:
[null, 1, -1, -3]
解释:
NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]);
numArray.sumRange(0, 2); // return 1 ((-2) + 0 + 3)
numArray.sumRange(2, 5); // return -1 (3 + (-5) + 2 + (-1))
numArray.sumRange(0, 5); // return -3 ((-2) + 0 + 3 + (-5) + 2 + (-1))
提示:
0 <= nums.length <= 10^4
-10^5 <= nums[i] <= 10 ^5
0 <= i <= j < nums.length
最多调用 10^4 次 sumRange 方法
来源:力扣(LeetCode)

解题思路

  这个题可以直接按照题目的意思翻译出来。

class NumArray:def __init__(self, nums: List[int]):self.nums=numsdef sumRange(self, left: int, right: int) -> int:return sum(self.nums[left:right+1])# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)


  但是运行时间接近了1000ms,对应多次调用显然是不合适的,想要优化这个API必须以空间换取时间。在left和right之间的和除了一个一个相加起来,还有另一种思路,那就是用前right项和减去前left项和,这样换取时间的空间便是每个阶段的数组和,这个和是一个累计函数单调非减,有点类似于概率论上的分布函数(CDF)。

class NumArray:def __init__(self, nums: List[int]):self.nums=numsself.NUMS=copy.deepcopy(nums)for i in range(1,len(self.NUMS)):self.NUMS[i]+=self.NUMS[i-1]def sumRange(self, left: int, right: int) -> int:return self.NUMS[right]-self.NUMS[left]+self.nums[left]# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)

LeetCode简单题之区域和检索 - 数组不可变相关推荐

  1. LeetCode(303)——区域和检索 - 数组不可变(JavaScript)

    给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点. 示例1: 给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 ...

  2. LeetCode中等题之区域和检索 - 数组可修改

    题目 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nu ...

  3. leetcode - 303.区域和检索-数组不可变(动态规划)

    303.区域和检索-数组不可变 ------------------------------------------ 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素 ...

  4. leetcode 303. 区域和检索 - 数组不可变(Java版)

    题目 303. 区域和检索 - 数组不可变 题解 经典的累加和问题. 定义一个数组 sum,存放数组从 0 到 sum 的累加和. 欲求某区间的累加和,只需将对应位置 sum 相减即可. 时间复杂度O ...

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

    303. 区域和检索 - 数组不可变 Ideas 啥也没有,直接求和. Code Python from typing import Listclass NumArray:def __init__(s ...

  6. LeetCode 303. 区域和检索 - 数组不可变(前缀和)

    1. 题目 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点. 示例: 给定 nums = [-2, 0, 3, -5, 2, -1],求 ...

  7. LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)

    1. 题目 2. 解题 类似题目:LeetCode 308. 二维区域和检索 - 可变(前缀和) dp[i][j]数组表示 从左上角到i,j位置的所有和 sum[i+1][j+1]=sum[i+1][ ...

  8. leetcode 303. Range Sum Query - Immutable | 303. 区域和检索 - 数组不可变(一维前缀和问题)

    题目 https://leetcode.com/problems/range-sum-query-immutable/ 题解 标准的前缀和问题,简单题,不多说,直接上代码 import java.ut ...

  9. C练题笔记之:Leetcode-303. 区域和检索 - 数组不可变

    题目: 给定一个整数数组  nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= rig ...

最新文章

  1. golang 创建文件目录 os.Mkdir、os.MkdirAll 区别
  2. CentOS6.6上进程挂起的诡异问题和处理
  3. mag6000变送器怎么使用_变送器的迁移原理和故障分析
  4. 南航计算机学院岳涛,自动化学院 - 南京航空航天大学
  5. 深入浅出MFC学习笔记:MFC六大关键技术仿真之RTTI运行时类型识别
  6. 学习iPhone开发中 sqlite3的使用
  7. java 线程 内部_从Java中的main()内部在线程实例上运行wait()
  8. --initialize specified but the data directory has files in it. Aborting.
  9. Liunx服务管理(Centos)
  10. SVN 代码与文件管理小记
  11. 【方向盘】“江郎才尽”的周杰伦,出道已21周年
  12. JTT808/1078管理平台发布
  13. 不用恢复出厂设置啦,联想电脑YogaDuet如何升级win11?在BIOS开启加载系统初始值 打开Intel Platform Trust开启TMP2.0更新win11
  14. 程序员到底是吃青春饭还要奋斗?那么行业前景又如何?
  15. 以正方体一个顶点进行旋转的3D立方体动画
  16. 胡灵 c语言,清华作业们男女主角现身
  17. 排序 ---- 快排(C语言)
  18. Running pipenv gives TypeError: 'module' object is not callable
  19. 缓存加速----Squid传统代理透明代理
  20. 几何光学学习笔记(12)- 3.9几种典型系统的理想光学系统性质 3.10 矩阵运算在几何光学中的应用

热门文章

  1. 2022-2028年中国钢铁电商产业竞争现状及发展前景预测报告
  2. 2022-2028年中国汽车橡胶件行业市场调查研究及前瞻分析报告
  3. linux 下根据cpp文件快速书写头文件
  4. 站在巨人的肩膀上“思考”问题,重在思考而不是拿来主义
  5. LeetCode简单题之整数的各位积和之差
  6. 使嵌入式系统调试更容易:有用的硬件和软件提示
  7. 人脸识别数据集精粹(下)
  8. 单目摄像头标定与测距
  9. 用OpenCV4实现图像的超分别率
  10. float js 正则 验证_使用HTML和Vuejs进行表单验证