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

news2024/12/27 13:01:51

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

欢迎关注公众号“三戒纪元”

题目

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

  1. 计算索引 leftright (包含 leftright)之间的 nums 元素的 ,其中 left <= right

实现 NumArray 类:

  • NumArray(int[] nums) 使用数组 nums 初始化对象
  • int sumRange(int i, int j) 返回数组 nums 中索引 leftright 之间的元素的 总和 ,包含 leftright 两点(也就是 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
  • 最多调用 104sumRange 方法

我的解法

因为这题需要随时能够通过左右区间,取到区间的和,所以在数组初始化的时候,就得计算区间值了。每个位置上存储前面N位的和,这样计算左右区间时,只需要两个区间对应的和相减即可。

class NumArray {
public:
    NumArray(vector<int>& nums) {
        int sum = 0;
        size_t count = nums.size();
        for(size_t i = 0; i < count; ++i) {
            sum += nums[i];
            sums.push_back(sum);
        }
    }
    
    int sumRange(int left, int right) {
        if(left == 0) {
            return sums[right];
        } else {
            return sums[right] - sums[left - 1];
        }
    }
    vector<int> sums;
};

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

解法2

还有“踏九州”网友使用C++ acculate累加的。

class NumArray {
public:
    NumArray(vector<int>& nums) {
        this->vec = nums;
    }
    
    int sumRange(int left, int right) {
        return accumulate(vec.begin() + left, vec.begin() + right + 1, 0);
    }

private:
    vector<int> vec;
};

应用(labuladong)

班上有若⼲同学,每个同学有⼀个期末考试的成绩(满分100 分),那么请你实现⼀个 API ,输⼊任意⼀个分数段,返回有多少同学的成绩在这个分数段内。

那么,你可以先通过计数排序的⽅式计算每个分数具体有多少个同学,然后利⽤前缀和技巧来实现分数段查询的 API :

int[] scores; // 存储所有同学的分数
//试卷满分100分
int[] count = new int[100 + 1]
// 记录每个分数有⼏个同学
for (int score : scores)
count[score]++
// 构造前缀和
for (int i = 1; i < count.length; i++)
	count[i] = count[i] + count[i-1];
	//利⽤count这个前缀和数组进⾏分数段查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1031118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

24个Docker常见问题处理技巧

1.Docker 迁移存储目录 默认情况系统会将 Docker 容器存放在 var/lib/docker 目录下 [问题起因] 今天通过监控系统&#xff0c;发现公司其中一台服务器的磁盘快慢&#xff0c;随即上去看了下&#xff0c;发现 /var/lib/docker这个目录特别大。 由上述原因&#xff0c;我们都知…

低代码技术推动能源行业数字化转型,服务商模式带来转型新商机

“新能源企业通过数字化转型不仅可以提高企业的运营效率和市场竞争力&#xff0c;还可以创新商业模式、提高能源生产效率和可持续性、优化资源配置并适应市场需求。选择百数的服务商模式&#xff0c;不仅可以解决我们想实现数字化转型的需求&#xff0c;还让我们多了一个开展新…

计算机毕设 python图像检索系统设计与实现

文章目录 0 前言1 课题简介2 图像检索介绍(1) 无监督图像检索(2) 有监督图像检索 3 图像检索步骤4 应用实例5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&am…

uniapp——ios证书申请——详细步骤+遇到的坑——技能提升

三年前&#xff0c;我曾经写过uniapp的程序&#xff0c;时隔三年&#xff0c;又遇到了uniapp的需求&#xff0c;之前没有自行申请ios证书&#xff0c;现在终于要自己生成证书了。。。 是福不是祸&#xff0c;是祸躲不过。 uniapp生成ios证书的详细步骤 uniapp对接unipush的操作…

Revopoint的3D输出格式及转换工具

在 CES 展会期间&#xff0c;许多参观者向我们询问与我们的 3D 扫描仪相关的问题。 最常见的问题包括我们的扫描仪导出的文件格式&#xff0c;以及该文件是否与 3D 打印机兼容&#xff1f; 因此&#xff0c;我们决定回答这些问题&#xff0c;并在本文中对常见的 3D 文件格式进行…

notepad++配合正则表达式分组模式处理文本转化为sql语句

一、正则分组知识点补充 正则分组和捕获 ()&#xff1a;用于分组和捕获子表达式。 大白话就是()匹配到的数据&#xff0c;通过美元符号加下标可以获取该数据&#xff0c;例如$1、$2, 下标从1开始。 下面的案例就采用该模式处理文本数据 二、使用正则的需求背景 有一份报表…

Verilog:$readmemb和$readmemh系统函数的使用与其中的初始化地址相关问题(详细细节)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 $readmemb和$readmemh两个系统函数用于将文件中的数据加载到存储器或者被称为数组的memory中。首先给出他们的语法的BNF范式&#xff0c;有关BNF范式的内容可以在…

GaussDB技术解读系列:性能调优

近日&#xff0c;在第14届中国数据库技术大会&#xff08;DTCC2023&#xff09;的GaussDB“五高两易”核心技术&#xff0c;给世界一个更优选择专场&#xff0c;华为数据库技术专家李士福详细解读了GaussDB性能调优的相关技术和应用实践。 本篇为大家分享GaussDB性能调优的实践…

【MySQL 45讲笔记】

文章目录 第一讲&#xff1a;一条SQL查询语句是如何执行的&#xff1f;第二讲&#xff1a;一条SQL更新语句是如何执行的&#xff1f;第三讲&#xff1a;事务隔离&#xff0c;为什么你改了我还看不见第四讲&#xff1a;深入浅出索引&#xff08;上&#xff09;第五讲&#xff1a…

Python函数绘图与高等代数互溶实例(二): 闪点函数

Python函数绘图与高等代数互溶实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互溶实例(二):闪点函数 Python函数绘图与高等代数互溶实例(二):设置X|Y轴|网格线 一: 函数plot(),展示变量的变化趋势 import numpy as np import matplotlib.pyplot as plt from pylab i…

商家收款一万手续费多少

目前微信和支付宝作为主流的支付平台&#xff0c;为商家提供了安全、便捷的支付解决方案。但是在正常情况下&#xff0c;商家需要向平台支付交易额0.6%至1%不等的手续费&#xff0c;这个费率看似很少&#xff0c;但长期积累下来的手续费支出也是一笔不小的开支。 什么是收款手…

复习Day01:数组part01:701. 二分查找、35. 搜索插入位置、367. 有效的完全平方数、69. x的平方根、74. 搜索二维矩阵

之前的blog链接&#xff1a;https://blog.csdn.net/weixin_43303286/article/details/131690654?spm1001.2014.3001.5501 我用的方法是在leetcode再过一遍例题&#xff0c;明显会的就复制粘贴&#xff0c;之前没写出来就重写&#xff0c;然后从拓展题目中找题目来写。辅以Lab…

UI设计和平面设计的区别是什么?看完这篇一次搞懂

很多想要从事视觉领域工作的新手设计师&#xff0c;搞不懂UI设计和平面设计的区别&#xff1b;也有很多平面设计师工作后想转UI&#xff0c;却不知道该如何进行&#xff0c;导致择业和职业发展受阻&#xff0c;其实核心问题还是因为没有弄清楚UI设计和平面设计的区别是什么。 …

电工-三极管主要参数(直流、交流、极限)

三极管主要参数&#xff08;直流、交流、极限&#xff09; 三极管的主要参数分为三种&#xff0c;即直流参数、交流参数和极限参数&#xff0c;下面分别介绍&#xff1a; 直流参数 共发射极直流放大倍数βIc/Ib 集电极—基极反向截止电流Icbo&#xff0c;Ic0时&#xff0c;…

浅谈终端安全接入

前言&#xff1a; 随着网络的发展&#xff0c;现代企业大多都会部署企业的有线网络与无线网络&#xff0c;在传统的企业网内&#xff0c;随着越来越多的终端设备接入到公司网络&#xff0c;管理人员控制和审计外部用户接入的企业办公网的难度和工作量也越来越大。而如果允许外…

代码随想录二刷Day 15

102. Binary Tree Level Order Traversal vector<int>() it is basically constructor of std::vector class and will create a new empty vector. You can also mention the size of required vector in brackets. 访问二维vector的元素: 如果指定外层和内层向量的大…

技术贴 | 深度解析 PostgreSQL Protocol v3.0(二)— 扩展查询

引言 PostgreSQL 使用基于消息的协议在前端&#xff08;客户端&#xff09;和后端&#xff08;服务器&#xff09;之间进行通信。该协议通过 TCP/IP 和 Unix 域套接字支持。 《深度解析 PostgreSQL Protocol v3.0》系列技术贴&#xff0c;将带大家深度了解 PostgreSQL Protoc…

Matter 是什么?

Matter&#xff08;物联网Matter&#xff09;旨在成为一个可互操作的标准&#xff0c;促进技术采用和创新&#xff0c;逐渐取代智能家居生态系统的专有协议。 Matter采用一个开源的软件开发工具包&#xff08;SDK&#xff09;&#xff0c;其中包含了协议规范的实现&#xff0c…

如何低成本、低门槛开发全屋智能系统?

近期&#xff0c;某个科技通讯巨头豪掷 15 亿重金&#xff0c;准备成立房地产公司以大力推动全屋智能的发展。从大部分科技公司频频押注全屋智能领域来看&#xff0c;全屋智能已然成为智能家居第一大发展趋势&#xff0c;是资本市场的重头戏。 但全屋智能并不好做&#xff0c;…

【Linux】详解线程第一篇——由单线程到多线程的转变

线程详解 前言正式开始啥是线程理解线程Windows和Linux下的线程Windows下的线程Linux下的线程对比 重新理解进程理解曾经写的代码 Linux的线程pthread库验证多线程在同一个进程中跑ps -aL线程资源线程切换成本低线程缺点线程异常线程等待pthread_create的第三个参数——回调函数…