首页 > 其他分享 >303. 区域和检索 - 数组不可变

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

时间:2024-03-19 10:00:30浏览次数:23  
标签:检索 right nums int 303 数组 sumRange left

目录

题目

  • 给定一个整数数组 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))

前缀和

class NumArray:
    def __init__(self, nums: List[int]):
        s = [0] * (len(nums) + 1) #初始化前缀和数组,长度比原始数组多1
        for i, x in enumerate(nums): #i表示下标,x表示下标对应的值
            s[i + 1] = s[i] + x  # 计算前缀和,累加前一个前缀和和当前值
        self.s = s  # 将前缀和数组存储在实例变量中
    def sumRange(self, left: int, right: int) -> int:
        return self.s[right + 1] - self.s[left] #返回指定区间的和,通过前缀和数组计算

标签:检索,right,nums,int,303,数组,sumRange,left
From: https://www.cnblogs.com/lushuang55/p/18082099

相关文章

  • 重载自增++运算符预算符完成数组扩容
    今天突发奇想,我们平时的++运算符基本都只能自增数字,那我能不能实现一个当用户自增数组时也能完成数组增加一项呢(假设你不会使用c++的变长数组或者vector!)下面就是我的实现方法,各位大佬多多指教哦!比如说gyf大佬和yzs大佬以及lxb大佬?//重载++运算符扩容数组#include<......
  • 一维数组_ 石头剪刀布(老是感觉有错误的地方,请指正)
    任务描述石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问......
  • 209. 长度最小的子数组
    209.长度最小的子数组https://leetcode.cn/problems/minimum-size-subarray-sum/?envType=study-plan-v2&envId=top-interview-150 思路三种方法中,具有最优时间复杂度的方案滑动窗口设置start=0end=0执行循环:end向后探测,直到sum值大于等于target,更新最优长度......
  • JavaScript学习笔记5: 对象 - 数组Array
    JS对象-数组Array数组的定义及特性数组定义<script>//数组定义方式1,赋值给变量vararr1=newArray(1,2,3);//数组定义方式2,初始化数组vararr2=[4,5,6];</script>JS数组长度可变<script>vararr2=[4,5,6];//数组初始长度为3......
  • LeetCode2024年3月18日每日一题(303. 区域和检索 - 数组不可变)
    303.区域和检索-数组不可变一维前缀和定义构建前缀和数组区间求和示例适用场景题目代码解释成员变量构造函数`sumRange`方法注释版代码一维前缀和是处理数组区间求和问题的一种非常有效的方法。它通过预处理输入数组,使得任何区间的和都可以在常数时间内被计算......
  • 深入了解指针(3)【数组指针变量】【函数指针变量】【typedef关键字】
    一.数组指针变量1.什么是数组指针变量?说到数组指针,那必然要说一下指针数组,指针数组是什么呢?指针数组是一种数组,只不过这种数组存放的是地址(指针)。那把这两个词反过来,数组指针是什么?它是指针变量,还是数组?答案是:指针变量。这个指针有些特殊,它存放的是数组的地址,它是能够指向数......
  • css实现一个三排数组滚动抽奖
    简单理解可视化版本:<divclass="slot-machine"><divclass="reel"><div>Item1</div><div>Item2</div><div>Item3</div><div>Item1<......
  • Java基础知识篇04——数组
    哈喽,大家好!我是白夜,今天给大家聊聊数组。一、概念计算机在内存区域分配的一段连续的区域(空间),用来存储同种类型的多个数据简单的理解,数组就是一堆盒子,同一时间,可以保存多个相同数据类型的数据数组名:数组的名字数组元素:就是存放在数组里面的数据数组索引:就是数组里面连......
  • Go04-数组+切片+map
    Go4-数组+切片+map1.数组的定义、赋值、访问和遍历//1数组用来存放多个同一类型的数据,在Go中数组是值类型。//2数组的定义、赋值和遍历。//定义数字。vararrs[2]int//给数组元素赋值。arrs[0]=0arrs[1]=2//02fori:=0;i<len(arrs);i++{fmt.P......
  • 代码随想录算法训练营第23天|669. 修剪二叉搜索树|108.将有序数组转换为二叉搜索树|53
    代码随想录算法训练营第23天|669.修剪二叉搜索树|108.将有序数组转换为二叉搜索树|538.把二叉搜索树转换为累加树|总结篇669.修剪二叉搜索树这道题目比较难,比添加增加和删除节点难的多,建议先看视频理解。题目链接/文章讲解:https://programmercarl.com/0669.%E4%BF%A......