LeetCode简单题之区域和检索 - 数组不可变
题目
给定一个整数数组 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简单题之区域和检索 - 数组不可变相关推荐
- LeetCode(303)——区域和检索 - 数组不可变(JavaScript)
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点. 示例1: 给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 ...
- LeetCode中等题之区域和检索 - 数组可修改
题目 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nu ...
- leetcode - 303.区域和检索-数组不可变(动态规划)
303.区域和检索-数组不可变 ------------------------------------------ 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素 ...
- leetcode 303. 区域和检索 - 数组不可变(Java版)
题目 303. 区域和检索 - 数组不可变 题解 经典的累加和问题. 定义一个数组 sum,存放数组从 0 到 sum 的累加和. 欲求某区间的累加和,只需将对应位置 sum 相减即可. 时间复杂度O ...
- 303. 区域和检索 - 数组不可变
303. 区域和检索 - 数组不可变 Ideas 啥也没有,直接求和. Code Python from typing import Listclass NumArray:def __init__(s ...
- LeetCode 303. 区域和检索 - 数组不可变(前缀和)
1. 题目 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点. 示例: 给定 nums = [-2, 0, 3, -5, 2, -1],求 ...
- LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
1. 题目 2. 解题 类似题目:LeetCode 308. 二维区域和检索 - 可变(前缀和) dp[i][j]数组表示 从左上角到i,j位置的所有和 sum[i+1][j+1]=sum[i+1][ ...
- leetcode 303. Range Sum Query - Immutable | 303. 区域和检索 - 数组不可变(一维前缀和问题)
题目 https://leetcode.com/problems/range-sum-query-immutable/ 题解 标准的前缀和问题,简单题,不多说,直接上代码 import java.ut ...
- C练题笔记之:Leetcode-303. 区域和检索 - 数组不可变
题目: 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= rig ...
最新文章
- golang 创建文件目录 os.Mkdir、os.MkdirAll 区别
- CentOS6.6上进程挂起的诡异问题和处理
- mag6000变送器怎么使用_变送器的迁移原理和故障分析
- 南航计算机学院岳涛,自动化学院 - 南京航空航天大学
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之RTTI运行时类型识别
- 学习iPhone开发中 sqlite3的使用
- java 线程 内部_从Java中的main()内部在线程实例上运行wait()
- --initialize specified but the data directory has files in it. Aborting.
- Liunx服务管理(Centos)
- SVN 代码与文件管理小记
- 【方向盘】“江郎才尽”的周杰伦,出道已21周年
- JTT808/1078管理平台发布
- 不用恢复出厂设置啦,联想电脑YogaDuet如何升级win11?在BIOS开启加载系统初始值 打开Intel Platform Trust开启TMP2.0更新win11
- 程序员到底是吃青春饭还要奋斗?那么行业前景又如何?
- 以正方体一个顶点进行旋转的3D立方体动画
- 胡灵 c语言,清华作业们男女主角现身
- 排序 ---- 快排(C语言)
- Running pipenv gives TypeError: 'module' object is not callable
- 缓存加速----Squid传统代理透明代理
- 几何光学学习笔记(12)- 3.9几种典型系统的理想光学系统性质 3.10 矩阵运算在几何光学中的应用