【数组Array】力扣-303 区域和检索 - 数组不可变
2023-12-14 21:34:56
目录
题目描述
给定一个整数数组 ?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))
提示:
1 <= nums.length <= 104
-105?<= nums[i] <=?105
0 <= i <= j < nums.length
- 最多调用?
104
?次?sumRange
?方法
解题过程
这道题,我不知道在考察什么,但是简单实现了一下通过了,代码如下:
结果:
?
?如何去看了labuladong题解,hhh,简直了,我就是题解中说的那种“没学过前缀和的人~”,学习一下题解吧!
labuladong题解
题解中说,我使用的方法,虽然可以达到效果,但是效率很差,原因是方法sumRange会被频繁调用,时间复杂度是O(N),而最优解是使用前缀和技巧,不使用for循环,将sunRange函数的时间复杂度降为O(1)。
文章来源:https://blog.csdn.net/weixin_42672331/article/details/134996263
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!