当前位置: 首页 > news >正文

【Leetcode 热题 100 - 扩展】303. 区域和检索 - 数组不可变

问题背景

给定一个整数数组 n u m s nums nums,处理以下类型的多个查询:
计算索引 l e f t left left r i g h t right right(包含 l e f t left left r i g h t right right)之间的 n u m s nums nums 元素的 ,其中 l e f t ≤ r i g h t left \le right leftright
实现 NumArray 类:

  • NumArray(int[] nums) 使用数组 n u m s nums nums 初始化对象。
  • int sumRange(int i, int j) 返回数组 n u m s nums nums 中索引 l e f t left left r i g h t right right 之间的元素的 总和 包含 l e f t left left r i g h t right right 两点(也就是 n u m s [ l e f t ] + n u m s [ l e f t + 1 ] + . . . + n u m s [ r i g h t ] nums[left] + nums[left + 1] + ... + nums[right] nums[left]+nums[left+1]+...+nums[right])。

数据约束

1 ≤ n u m s . l e n g t h ≤ 1 0 4 1 \le nums.length \le 10 ^ 4 1nums.length104
− 1 0 5 ≤ n u m s [ i ] ≤ 1 0 5 -10 ^ 5 \le nums[i] \le 10 ^ 5 105nums[i]105
0 ≤ i ≤ j < n u m s . l e n g t h 0 \le i \le j < nums.length 0ij<nums.length
● 最多调用 1 0 4 10 ^ 4 104 s u m R a n g e sumRange sumRange 方法

解题过程

前缀和模板题,注意一下通常区间都是左闭右开的,定义的前缀和多预留一个位置来保存初始值零,这样能避免计算涉及到首位元素的时候需要特殊处理。

具体实现

class NumArray {private static int[] preSum;public NumArray(int[] nums) {int n = nums.length;preSum = new int[n + 1];for(int i = 0; i < n; i++) {// 实际的前缀和是从下标为 1 的位置开始记录的preSum[i + 1] = preSum[i] + nums[i];}}public int sumRange(int left, int right) {// 区间左闭右开,[left, right] 范围内的和需要用 (right + 1) 位置的元素来计算return preSum[right + 1] - preSum[left];}
}/*** Your NumArray object will be instantiated and called as such:* NumArray obj = new NumArray(nums);* int param_1 = obj.sumRange(left,right);*/

http://www.mrgr.cn/news/80889.html

相关文章:

  • 2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码
  • linux-----进程及基本操作
  • 【多维DP】【hard】力扣1269. 停在原地的方案数
  • 自然语言处理学什么
  • python中的字典数据和标准json格式区别
  • 华为HarmonyOS实现跨多个子系统融合的场景化服务 -- 4 设置打开App Button
  • 【数据可视化案列】白葡萄酒质量数据的EDA可视化分析
  • ECharts关系图-关系图11,附视频讲解与代码下载
  • FPGA 16 ,Verilog中的位宽:深入理解与应用
  • OCR实践—PaddleOCR
  • 【0373】Postgres内核 MultiXact shared memory 初始化 ( 2 )
  • Docker_常用命令详解
  • STM32单片机芯片与内部33 ADC 单通道连续DMA
  • 被裁20240927 --- 嵌入式硬件开发 前篇
  • Mac iOS、Android、Flutter、React Native开发环境配置
  • 【Linux】文件IO--read/write/缓冲区(详)
  • 【Rust自学】4.3. 所有权与函数
  • [Linux] 信号保存与处理
  • 单片机:实现延时函数(附带源码)
  • 《剑网三》遇到找不到d3dx9_42.dll的问题要怎么解决?缺失d3dx9_42.dll是什么原因?
  • 字节跳动C++面试题及参考答案(下)
  • git使用和gitlab部署
  • [LeetCode-Python版] 定长滑动窗口3——1461. 检查一个字符串是否包含所有长度为 K 的二进制子串
  • 二十一、Ingress 进阶实践
  • 十大排序算法汇总(基于C++)
  • Unity开发哪里下载安卓Android-NDK-r21d,外加Android Studio打包实验