【数组Array】力扣-303 区域和检索 - 数组不可变

发布时间:2023-12-17 22:24:45

目录

题目描述

解题过程

labuladong题解


题目描述

给定一个整数数组 ?nums,处理以下类型的多个查询:

  1. 计算索引?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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。