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

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

难度简单245收藏分享切换为英文接收动态反馈

给定一个整数数组nums,求出数组从索引i 到ji ≤ j)范围内元素的总和,包含i、j 两点。

实现 NumArray 类:

NumArray(int[] nums) 使用数组 nums 初始化对象

int sumRange(int i, int j) 返回数组 nums 从索引i 到ji ≤ j)范围内元素的总和,包含i、j 两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))



提示:

0 <= nums.length <= 104

-105<= nums[i] <= 105

0 <= i <= j < nums.length

最多调用 10^4 次 sumRange 方法


解决方案:

简单点暴力点?就是一个类



原始



发现题目有提示:最多调用 10^4 次 sumRange 方法


优化1:用一个数组来维护前缀和

Sum[j] = mNums[0] + mNums[1] +  mNums[2] + mNums[3] + …… + mNums[j] 

那么

sumRange(i , j ) = sum[j] - sum[i] + mNums[i];




前缀和的修改,时间复杂度优化了很多
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容