LeetCode笔记:303. Range Sum Query - Immutable
2023-03-15 23:22:36 时间
问题:
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. Example: Given nums = [-2, 0, 3, -5, 2, -1] sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3 Note:
- You may assume that the array does not change.
- There are many calls to sumRange function.
大意:
给出一个整型数组 nums,寻找其中位置 i 与 j 之间元素的和,包括 i 与 j 元素。 例子: 给出 nums = [-2, 0, 3, -5, 2, -1] sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3 注意:
- 你可以假设数组不会变。
- 会多次调用 sumRange 函数。
思路:
这道题其实不是考某种算法,而是考实现的方式。题目给出了一个初始化函数一个计算和的函数,如下:
public class NumArray {
public NumArray(int[] nums) {
}
public int sumRange(int i, int j) {
}
}
一般的实现方法很直接,定义一个变量 nums 数组,在初始化函数中赋值,在求和函数中直接遍历计算就行了很简单。但是如果直接这样做,答案会超时。题目明确指出求和函数会被多次调用,因此这里应该尽量简化求和函数,而把复杂度放在初始化时。
我们在初始化时,直接将每个元素的值改为从第一个元素到当前元素的和,这样在初始化时遍历计算一次。然后在求和时,只需要很简单地用两个位置的值相减就可以得出中间元素的和了。
代码(Java):
public class NumArray {
int[] nums;
public NumArray(int[] nums) {
for (int i = 1; i < nums.length; i++)
nums[i] += nums[i-1];
this.nums = nums;
}
public int sumRange(int i, int j) {
if (i == 0) return nums[j];
else return nums[j] - nums[i-1];
}
}
相关文章
- 从本体论开始说起——运营商关系图谱的构建及应用
- 如何成为一名数据科学家?
- 从未见过的堂兄杀了人,你的DNA是关键证据
- 20个安全可靠的免费数据源,各领域数据任你挑
- 20个安全可靠的免费数据源,各领域数据任你挑
- 阿里云李飞飞:All in Cloud时代,云原生数据库优势明显
- 基于Hadoop生态系统的一高性能数据存储格式CarbonData(性能篇)
- 大数据告诉你:10年漫威,到底有多少角色
- TigerGraph:实时图数据库助力金融风控升级
- Splunk利用Splunk Connected Experiences和Splunk Business Flow 扩大数据访问
- 大数据开发常见的9种数据分析手段
- 以免在景区看人,我爬了5W条全国景点门票数据...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
- 数据科学家告诉你哪些计算机科学书籍是你应该看的
- Kafka作为大数据的核心技术,你了解多少?
- Spring Boot 整合 Redis 实现缓存操作
- 大数据学习必须掌握的五大核心技术有哪些?
- 基于Antlr在Apache Flink中实现监控规则DSL化的探索实践
- 甲骨文再次被Gartner评为分析型数据管理解决方案魔力象限领导者
- 爬取吴亦凡微博102118条转发数据,扒一扒流量的真假