刷题专栏(二十一):区域和检索 - 数组不可变

80 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

前言

刷题专栏到目前已经是第二十一篇了,欢迎大家来关注我的刷题专栏,一起来刷题。

今天这道题,还是涉及数组相关知识,《区域和检索 - 数组不可变》。

不过此题和其他题不太一样,此题是要单独实现一个类,并且要通过调用这个类的方法来实现某些效果。

这种类型的题大多需要在构造函数中做一些基础的初始化处理。

至于这道题具体的一些操作是什么,就让我们一起来看一下吧。

image.png

算法题:区域和检索 - 数组不可变

今天的这道题目看似描述的文字很多,其实并不难理解。

只需要抓住一个重要的点,就是如何在类实例化时将部分数据初始化。

解决了这个问题,也就很好做出来了。

下面我们就可以来看一下相关代码的编写了。

代码展示

此次运行的代码如下,就是通过构造函数来初始化内部元素,然后通过其他方法来取出相应的值。

class NumArray {

    int[] sums;

    public NumArray(int[] nums) {
        int n = nums.length;
        sums = new int[n + 1];
        for (int i = 0; i < n; i++) {
            sums[i + 1] = sums[i] + nums[i];
        }
    }
    
    public int sumRange(int i, int j) {
        return sums[j + 1] - sums[i];
    }

}

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

代码执行结果

本次处理结果还是比较可以的,虽然内存消耗实为严重。就交给大家自己去完善一下了。

image.png

总结

这道题的不同之处在于给出了一个完整的类让大家去自己实现,那么为什么要给一个完整的类呢,必然就是要通过初始化来解决一下问题。

下回碰到这种题也就很容易解出来了。