一维前缀和的实现

news2024/11/18 21:54:03

         这是C++算法基础-基础算法专栏的第十一篇文章,专栏详情请见此处


引入

        我们用朴素做法求一维数组的区间和时,一般是从前向后循环累加,它的时间复杂度为O(n),当求区间和的次数过多,则会有超时的可能,那有没有时间复杂度更低的做法呢?当然有,这就是前缀和做法,它求区间和的时间复杂度为O(1)

        下面我们就来讲一维前缀和的实现。

定义

        前缀和是一种重要的预处理方式,能大大降低查询的时间复杂度。

过程

        表示

        对于原数组a,一维前缀和额外开辟了一个数组b,对于每个b\left [ i \right ],储存了a\left [ i \right ]-a\left [ i-1 \right ],也就是说,s_{x}=\sum_{i=1}^{x}a_{i}

        赋值

        赋值操作一般在输入数组a时同时进行,我们可以容易得出其递推公式:s\left [ i \right ]=s\left [ i-1 \right ]+a\left [ i \right ]

        求区间和

        当我们想得到a数组区间\left [ l,r \right ]中的和,应该怎么去做呢?这里我们用图表加以理解,0表示当前位未计入总和,1表示当前位计入总和(后图同理)。

        首先,图一展示了起始状态,然后,我们将s\left [ r \right ]计入总和(图二),也就是计算了a\left [ 1 \right ]\sim a\left [ r \right ]的和,但我们并不需要a\left [ l \right ]之前的数计入总和,所以最后将s\left [ l-1 \right ]减去(图三)。

        得出结论:a\left [ l \right ]+\cdots +a\left [ r \right ]=s\left [ r \right ]-s\left [ l-1 \right ]

        代码

        下面给出一维前缀和代码:

表示:s[i]=a[1]+a[2]+...+a[i]
赋值:s[i]=s[i-1]+a[i]
求和:a[l]+...a[r]=s[r]-s[l-1]

上一篇-高精度除法的实现    C++算法基础专栏文章    下一篇-二维前缀和的实现


每周六更新一篇文章,内容一般是自己总结的经验或是在其他网站上整理的优质内容

点个赞,关注一下呗~

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

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

相关文章

【吊打面试官系列-MyBatis面试题】MyBatis 实现一对一有几种方式?具体怎么操作的?

大家好,我是锋哥。今天分享关于 【MyBatis 实现一对一有几种方式?具体怎么操作的?】面试题,希望对大家有帮助; MyBatis 实现一对一有几种方式?具体怎么操作的? 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询…

Java跳出循环的四种方式

1、continue,break,return continue:跳出当前层循环的当前语句,执行当前层循环的下一条语句。   continue标签 break:跳出当前层循环。 break标签:多层循环时,跳到具体某层循环。 return:结束所有循环…

烟草企业如何在数字化转型中实现从“传统”到“智能”的跨越?

在数字化浪潮的席卷下,各行各业都在经历着深刻的变革。作为国民经济的重要组成部分,烟草行业正处于高质量发展的重要阶段,加快信息系统国产化升级,对于提升行业竞争力、强化信息安全保障具有重要战略意义。 达梦数据积极助力烟草行…

AIGC | 在机器学习工作站安装NVIDIA cuDNN 深度学习库

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x03.初识与安装 cuDNN 深度学习库 什么是cuDNN? cuDNN(CUDA Deep Neural Network library)是由英伟达(NVIDIA)开发的深度学习库,专门用…

怀念旧的Windows声音?以下是如何在Windows 11中恢复它们

如果你渴望旧的Windows声音,希望能在Windows 11上再次听到,那你就很幸运了。我们将向你展示如何下载必要的声音包并创建复古的声音方案。 如何获取旧Windows声音的声音包 你需要做的第一件事是下载一个包含旧Windows版本声音的声音包。此外,请确保它包含的每个声音都是WAV…

【学习笔记】爱立信SPO 1400 CRAFT软件基础知识6——配置的备份与恢复的详细方法

一、前期准备 提示:下面所有学习内容都是基于以下条件完成的 条件1.已经正确安装并正常运行SPO 1400 CRAFT软件(以下简称LCT) 条件2.确认已正确使用爱立信SPO 1400 CRAFT软件通过网络登录设备(以下简称NE) 具体登录…

Python制作动态颜色变换:颜色渐变动效

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame颜色变换函数主循环 完整代码 引言 颜色渐变动画是一种视觉上非常吸引人的效果,常用于网页设计和图形应用中。在这篇博客中,我们将使用Python创建一个动态颜色变换的动画效果。通…

记录discuz修改用户的主题出售价格

大家好,我是网创有方的站长,今天遇到了需要修改discuz的主题出售价格。特此记录下 方法很简单: 进入用于组-》选择论坛-》批量修改

前端面试题(CSS篇三)

一、简单介绍使用图片 base64 编码的优点和缺点。 base64是一种图片处理格式,通过特定的算法将图片编码为一长串字符串,在页面显示的时候,可以使用该字符串来代替图片的url属性。 使用base64的优点: 减少一个图片的http请求 使用base64的缺点…

倒退型自闭症与轻度自闭症有什么区别?

作为星贝育园自闭症儿童康复中心的一名专业教师,我深知家长们在面对自闭症谱系障碍(ASD)时的种种疑问与挑战,尤其是关于倒退型自闭症与轻度自闭症之间的区别。今天,我将从专业视角出发,深入浅出地解析这两种…

Java项目:基于SSM框架实现的德云社票务管理系统【ssm+B/S架构+源码+数据库+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的德云社票务管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功…

在 Azure 云中开始使用适用于 Ubuntu 的 Grafana

介绍 Grafana 是一款开源工具,可用于可视化和分析数据。它特别适合跟踪计算机系统的运行情况。在构建微服务或其他类型的应用程序时,您可能需要分析日志数据、轻松可视化数据或设置特殊警报以接收有关系统中发生的某些事件的通知。 这就是为什么你可能…

【Python】已解决:(Python写入Excel表格报错)‘NoneType’ object has no attribute ‘write’

文章目录 一、分析问题背景二、可能出错的原因四、正确代码示例五、注意事项 已解决:(Python写入Excel表格报错)‘NoneType’ object has no attribute ‘write’ 一、分析问题背景 在处理Excel文件时,Python提供了多种库来方便…

【Python进阶】函数的扩展

函数 目录 函数 一、容器知识补充 1、字典遍历方法 2、遍历字典元素 keys()方法: values()方法: items()方法: 3、公共运算符 4、公共方法 二、函数介绍 1、函数的概念 2、引入函数 3、函数定义与调用 4、函数的参数 5、函数…

了解基于大模型的多模态风险内容识别技术研究

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 在 AIGC 多场景、多模态的应用中,平台用户输入的信息以及平台模型生成的内容中,可能存在大量涉及色情、敏感、暴力、违禁等风险元素。多模态风险内容识别是一种先进的内容安全分…

【C++】继承(一)

目录 1、继承的概念与定义 1.1 继承的概念 1.2 继承的定义 1.2.1 定义格式 1.2.2 继承基类成员访问方式的变化 2、基类和派生类对象赋值转换 3、继承中的作用域 4、派生类的默认成员函数 4.1 构造函数 4.2 拷贝构造 4.3 operator 4.4 析构函数 面向对象的三大特性是…

CAN转PN网关模块连接激光切割机的配置方法

激光切割机在工业生产中被广泛应用,而激光发射器与控制设备常以不同的协议存在两者之间,CAN总线和Profinet以各自的特点被广泛用于设备当中。本文将介绍介绍兴达易控CAN转Profinet网关模块(XD-PN_CAN20)连接 CAN 激光切割机的使用…

使用Python绘制双向条形图

使用Python绘制双向条形图 双向条形图效果代码 双向条形图 双向条形图用于比较两个类别的数值分布,条形在中轴线两侧对称排列。这种图表常用于显示两个变量的对比情况,例如男女不同年龄段人口数量对比。 效果 代码 import matplotlib.pyplot as plt i…

实现模型贴图的移动缩放旋转

技术:threejscanvasfabric 效果图: 原理:threejs中没有局部贴图的效果,只能通过map 的方式贴到模型上,所以说换一种方式来实现,通过canvasfabric来实现图片的移动缩放旋转,然后将整个画布以map…

APP项目测试 之 APP性能测试-- 性能测试工具(SoloPi工具)

1.SoloPi简介 (1)什么是SoloPi? SoloPi: 是一个无线化、非侵入式的 Android 自动化工具 ,具备 录制回放、性能测试 等功能。 (2)SoloPi的作用是什么? 基础性能测试:能够…