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

本文介绍了一种使用动态规划的方法来高效求解数组中任意区间的元素和。通过预处理数组,存储从0到各位置的累积和,实现了快速查询任意两个下标之间的和,大大提高了算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:

开始没看懂题目,想着不是一个循环的事情吗,但是看网上许多人提醒说是多次调用方法sumRange,意思是给你一个nums[100],然后给你多组i j 比如求和1--100的 1--50的 2---10 50--60的
我算是取巧了 毕竟是动态规划的题目 就直接用一个数组a[nums.length]存起了0--j的和
那就简单了 然后i--j的和不就是 a[j]-a[i-1]嘛
a[j]是0到j a[i]是0到i a[j]-a[i-1]就是i到j

源代码:

class NumArray {
    int sum=0;
    int[] a;//这个数组存的是a[i]前的和
    public NumArray(int[] nums) {
        
        a=new int[nums.length];
        for (int i=0;i<a.length;i++){
            sum+=nums[i];
            a[i]=sum;
        }

    }
    
    public int sumRange(int i, int j) {
            if (i==0){
                return a[j];
            }
            else{
                return a[j]-a[i-1];
            }
    }
}

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray obj = new NumArray(nums);
 * int param_1 = obj.sumRange(i,j);
 */

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值