备战蓝桥杯————前缀和数组1

一、基本概念

定义:前缀和数组(Prefix Sum Array)是一个数组,它存储了原数组(或序列)的连续子数组之和。对于一个给定的数组 nums,其前缀和数组 cumulativeSum 的第 i 个元素 cumulativeSum[i] 表示 nums 从第一个元素到第 i 个元素的累加和。

表示累加和:前缀和数组的计算公式可以表示为:

 cumulativeSum[i] =  cumulativeSum[i - 1] + nums[i - 1]

其中, cumulativeSum[0] 通常初始化为 0,以便于计算。

二、构造方法

初始化:在构造前缀和数组时,首先需要创建一个长度比原数组 nums 多一个元素的新数组 cumulativeSum。这样做是为了简化边界条件的处理,特别是当需要计算从第一个元素开始的子区间和时。

遍历更新:通过遍历原数组 nums,我们可以逐个计算前缀和数组的元素。这个过程可以表示为一个循环,从 i = 1 遍历到 nums.length,每次更新 cumulativeSum[i] 的值为 cumulativeSum[i - 1] 加上 nums[i - 1]

三、查询操作

快速计算:给定一个闭区间 [left, right],我们可以通过以下公式快速计算该区间的累加和:

sum =  cumulativeSum[end + 1] -  cumulativeSum[start]

这里,end+ 1 是为了包含 end 索引的元素在内,因为前缀和数组的索引是从 1 开始的。

时间复杂度:查询操作的时间复杂度是 O(1),因为一旦前缀和数组被构造出来,任何区间和的查询都可以直接通过数组索引完成,无需再次遍历原数组。

四、应用场景

区间查询:在处理需要频繁查询区间和的问题时,前缀和数组非常有用。例如,在一个数据流应用中,你可能需要快速回答“到目前为止,总共有多少数据量?”前缀和数组可以立即给出答案。

动态规划:在动态规划问题中,前缀和数组可以用来优化状态转移,特别是在涉及到区间和计算的问题,如最长递增子序列、最小子树和等。

五、优化和变种

优化技巧:在某些情况下,我们可以优化前缀和数组的构造过程。例如,如果原数组是有序的,我们可以利用二分查找来加速更新过程。

变种:前缀和数组的概念可以扩展到多维。例如,在二维数组中,我们可以构造一个二维前缀和数组,用于快速计算矩形区域的和(后续内容)。

六、代码实现

public class CumulativeSumCalculator {// 累积和数组private int[] cumulativeSum;// 初始化累积和数组public CumulativeSumCalculator(int[] nums) {// 初始化累积和数组,第一个元素为0cumulativeSum = new int[nums.length + 1];// 计算累积和for (int index = 1; index <= nums.length; index++) {cumulativeSum[index] = cumulativeSum[index - 1] + inputArray[index - 1];}}// 查询指定区间的累积和public int querySum(int start, int end) {// 返回区间 [start, end] 的累积和return cumulativeSum[end + 1] - cumulativeSum[start];}
}

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

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

相关文章

【前端素材】推荐优质在线家具电商网页Hurst平台模板(附源码)

一、需求分析 1、系统定义 家具电商平台是指专门销售家具产品的在线电子商务平台。这些平台专注于家具类商品的销售和服务&#xff0c;为消费者提供方便快捷的购买体验。 2、功能需求 在线家具商城平台是指通过互联网提供家具购买服务的电子商务平台。这类平台为消费者和家…

基于ESP32的MicroPython项目量产烧写指南

背景 前段时间用MicroPython开发了一个项目&#xff0c;硬件是ESP32-C3&#xff0c;目前准备量产&#xff0c;我需要提供固件以供加工厂批量烧录&#xff0c;需要把我有程序的板子里的程序读出来&#xff0c;然后下到别的板子上&#xff0c;以下做这件事情的过程记录。 1.固件…

专利实缴评估

专利实缴评估通常是指在企业进行注册资本实缴时&#xff0c;将专利权作为出资的形式&#xff0c;需要对专利权的价值进行评估&#xff0c;以确定其作为注册资本的数额。 这项评估过程主要涉及以下几个步骤&#xff1a; 1.专利权确认&#xff1a; 首先&#xff0c;需要明确待评…

专利转让具体怎么做

专利转让是指专利权人将自己的专利权全部或部分转移给他人的法律行为。在中国&#xff0c;专利转让的流程一般包括以下几个步骤&#xff1a; 1.签订转让合同&#xff1a;•专利权人&#xff08;转让方&#xff09;与受让人协商一致后&#xff0c;需签订书面的专利权转让合同。…

3_相机模型

相机标定对于联系相机测量和真实三维世界测量也很重要。它的重要性在于场景不仅仅是三维的&#xff0c;也是物理单位度量的空间。因此&#xff0c;确定相机的自然单位(像素)与物理单位(如mm)的关系是三维场景重构的重要部分。相机标定的过程既给出相机的几何模型又给出透镜的畸…

电感器在电路中的作用

同学们大家好&#xff0c;今天我们继续学习杨欣的《电子设计从零开始》&#xff0c;这本书从基本原理出发&#xff0c;知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例&#xff0c;可以说是全面系统地介绍了电子设计所需的知识…

pause、alarm、kill——进程——day13

今天主要讲线程中信号的三个函数 1.pause 1.pauseint pause(void); 功能:让进程睡眠,直到接收到信号(捕捉)才能继续向下执行eg&#xff1a; #include "head.h"void handler(int signo) {return; }int main(void) {signal(SIGINT,handler);printf("pause up!\…

学习大语言模型(LLM),从这里开始

在见识了ChatGPT的各种强大能力后&#xff0c;不少 NLP一线从业人员很自然地想到&#xff0c;以后开发者只要借助 ChatGPT&#xff0c;就可以做到现在大部分NLP工程师在做的事&#xff0c;比如文本分类、实体抽取、文本推理等。甚至随着大语言模型&#xff08;largelanguagemod…

2 开源鸿蒙OpenHarmony4.1源码下载和编译流程

开源鸿蒙OpenHarmony源码下载和编译流程 作者将狼才鲸日期2024-02-29 前景提要&#xff1a; 确定你要编译哪一块开发板&#xff1a; 我选择qemu_mini_system_demo 这个板子编译形态整体说明&#xff0c;含QEMU&#xff0c;可以编译哪些开发板和芯片qemu模拟器 arm核 mini轻…

Keepalived 双机热备基础知识

7.1 Keepalived 双机热备基础知识 Keepalived起初是专门针对LVS设计的一款强大的辅助工具&#xff0c;主要用来提供故障切换(Failover) 和健康检查査(Health Checking)功能一一判断LVS 负载调度器、节点服务器的可用性&#xff0c;及时隔离并替 换为新的服务器&#xff0c;当故…

Container killed on request. Exit code is 143

Bug信息 WARN YarnAllocator: Container marked as failed: container_e33_1480922439133_0845_02_000002 on host: hdp4. Exit status: 143. Diagnostics: Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143 Killed by externa…

day03_登录注销(前端接入登录,异常处理, 图片验证码,获取用户信息接口,退出功能)

文章目录 1. 前端接入登录1.1 修改前端代码1.2 跨域请求1.2.1 跨域请求简介1.2.2 COSR概述CORS简介CORS原理 1.2.3 CORS解决跨域 2. 异常处理2.1 提示空消息分析2.2 系统异常分类2.3 异常处理2.2.1 方案一2.2.2 方案二 3. 图片验证码3.1 图片验证码意义3.2 实现思路3.3 后端接口…

java找工作之JavaWeb(一)

JavaWeb 一个web应用有多部份组成&#xff08;静态web&#xff0c;动态web&#xff09; html&#xff0c;css&#xff0c;jsjsp&#xff0c;servletjava程序jar包配置文件(Properties) web应用程序编写完毕后&#xff0c;若想提供给外界访问&#xff0c;需要一个服务器来统一…

【IC验证】数据类型

一、思维导图 二、代码 &#xff08;1&#xff09;字符串 字符串的结尾不带空标识符null&#xff0c;\0。是动态存储方式&#xff0c;因此不用担心存储空间被用完。 编辑.SV文件使用 gvim 文件名 运行仿真使用 vcs -sverilog -full64 string_type.sv 和./simv命令如果是字…

【微服务】微服务架构包含哪些组件、各个组件又承担什么职责呢?

前面的文章里我们介绍了微服务架构的一些基础知识以及特点&#xff0c;也提到了国产的微服务架构标准实现SpringCloud Alibaba&#xff0c;聊了这么多&#xff0c;还是没有开始阐述各组件在Java技术体系中的具体实现。那从这里开始&#xff0c;我们开始全面认识微服务架构在Jav…

vue实现图片上传至oss,返回url插入数据库,最后在前端页面上回显图片

vue前端上传图像 写一个弹窗上传图片 上传图片的方式是oss&#xff0c;在上传之后将url存入数据库&#xff0c;下一步则是在列表上回显 <template><el-dialog:title"新增":visible.sync"dialogVisible":close-on-click-modal"false"…

不同类型的工业网关有何区别?

工业网关是一种用于连接工业设备和网络的关键设备&#xff0c;它能够将不同协议、不同传输速率的工业设备连接到网络上&#xff0c;实现数据的传输和共享。不同类型的工业网关之间存在一些区别&#xff0c;以下是一些常见的工业网关类型及其区别&#xff1a; 协议转换型工业网关…

上拉电阻与下拉电阻、电容的作用

上拉电阻与下拉电阻 在单片机电路中&#xff0c;上拉电阻和下拉电阻都是常见的电路元件&#xff0c;它们在数字电路设计中扮演着重要的角色。它们的作用如下&#xff1a; 1. **上拉电阻**&#xff1a; - **作用**&#xff1a;当一个引脚没有外部信号时&#xff0c;上拉电阻…

微调(Fine-tuning)技术概念

——微调&#xff0c;像化妆&#xff0c;一种“精细化、风格性调整”的人工美颜技能。 微调&#xff08;Fine-tuning&#xff09;是指在深度学习领域中&#xff0c;特别是针对预训练模型的一种训练策略。预先训练好的模型通常是在大规模无标注数据上通过自监督学习得到的&#…

【Micropython】I2C层次结构、I2C协议

文章目录 前言一、I2C的结构层次1.1 怎样在两个设备之间传输数据1.2 I2C如何传输数据1.3 硬件框图1.4 软件层次 二、IIC协议2.1 硬件连接2.2 I2C 总线的概念2.3 传输数据类比2.3 I2C信号2.4 I2C数据的含义 总结 前言 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一…