前缀和(1)_【模板】前缀和_模板

个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创

前缀和(1)_【模板】前缀和_模板

收录于专栏【经典算法练习】
本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌

目录

1. 题目链接 :

2. 题目描述 :

描述

输入描述:

输出描述:

示例1

3. 解法(前缀和) :

    算法思路 :

    代码展示 :

    结果分析 :


1. 题目链接 :

OJ链接: 【模板】前缀和

2. 题目描述 :

描述

给定一个长度为n的数组a1,a2,....ana1​,a2​,....an​.

接下来有q次查询, 每次查询有两个参数l, r.

对于每个询问, 请输出al+al+1+....+aral​+al+1​+....+ar​

输入描述:

第一行包含两个整数n和q.

第二行包含n个整数, 表示a1,a2,....ana1​,a2​,....an​.

接下来q行,每行包含两个整数   l和r.

1≤n,q≤1051≤n,q≤105
−109≤a[i]≤109−109≤a[i]≤109
1≤l≤r≤n1≤l≤r≤n

输出描述:

输出q行,每行代表一次查询的结果.

示例1

输入:

3 2
1 2 4
1 2
2 3

输出:

3
6

3. 解法(前缀和) :

    算法思路 :

1. 先预处理出来一个[前缀和]数组: 

        用dp[i]表示: [1,i]区间内所有元素的和,那么dp[i - 1]里面存的就是[1, i - 1]区间内所有元素的和,那么: 可得递推公式: dp[i] = dp[i - 1] + arr[i];

2. 使用前缀和数组,[快速]求出[某一个区间内]所有元素的和:

        当访问的区间是[l, r]时: 区间内所有元素的和为: dp[r] - dp[l - 1];

    代码展示 :

#include <iostream>
#include <vector>
using namespace std;int main() {int n, q;cin >> n >> q;{vector<long long> arr(n);vector<long long> dp(n + 1);for(int i = 0; i < n; i++)cin >> arr[i];for(int i = 0; i < n; i++)dp[i + 1] = dp[i] + arr[i];while(q--){int l, r;cin >> l >> r;cout << dp[r] - dp[l - 1] << endl;}return 0;}
}

        1. 输入部分:    

代码首先读取两个整数 n 和 q,其中 n 表示数组的大小,q 表示查询的次数。
接着,它声明了一个大小为 n 的数组 arr 用于存储输入的数据,以及一个大小为 n + 1 的数组 dp 用于存储前缀和。

        2. 前缀和计算 :

使用一个循环从输入中填充 arr 数组。循环运行 0 到 n - 1 的索引。
另一个循环用于填充 dp 数组,其中 dp[i + 1] 存储 arr 数组的前 i 个元素的和。这样,dp 数组的第一个元素 dp[0] 是 0,而 dp[1] 是 arr[0] 的值,以此类推。
        3. 查询部分 :

代码使用一个 while 循环处理查询,每次查询将读取两个整数 l 和 r,表示需要计算的区间。
它通过计算 dp[r] - dp[l - 1] 来获取从 l 到 r 的区间和。这里的 dp 数组有效地将区间和查询的复杂度降低到常数时间复杂度 O(1)。

 

 

    结果分析 :

主要部分的时间复杂度
1. 输入数组 arr :

代码首先读取 n 个元素到数组 arr 中,这个操作是 O(n) 的时间复杂度。
2. 计算前缀和 dp :

填充前缀和数组 dp 也是一个遍历操作,复杂度为 O(n)。在该部分,程序通过对 arr 中的元素进行加法运算,计算出 dp 数组。
3. 处理查询 :

代码使用一个 while 循环处理 q 次查询。对于每次查询,计算区间和的操作是 O(1),因为它只涉及 dp 数组的两次访问和一次减法运算。
因此,对于 q 次查询,总的时间复杂度是 O(q)。
综合时间复杂度
综上所述,整个程序的时间复杂度可以表示为:

O(n + q),其中 n 是输入数组的大小,q 是查询的次数。

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

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

相关文章

VM ware的安装——个人使用

VM ware的安装 Workstation 和 Fusion 对个人使用完全免费&#xff0c;企业许可转向订阅 如果没有官方账号需要注册一个 选择个人下载&#xff0c;会跳转到下一个页面 要勾选同意&#xff0c;才能下载 点击下载之后还会跳转到填写地址的页面&#xff0c;填写完同意后&#x…

免费与付费代理IP工具的优缺点分析

面对市场上众多的代理IP工具&#xff0c;选择合适的工具成为一项挑战。本文将深入分析免费与付费代理IP工具的优缺点&#xff0c;协助您做出明智的选择。 一、免费代理IP工具的优缺点 优点&#xff1a; 零成本&#xff1a;最大的优点在于无需任何费用。对于预算有限的用户&a…

Cortex-M7核心寄存器

参考内容&#xff1a;Cortex-M7编程手册 文章目录 软件执行的处理器模式和权限级别处理器模式软件执行的权限级别 栈Stacks核心寄存器Core registers通用寄存器General-purpose registers链接寄存器Link register程序计数器 Program counter程序状态寄存器Program status regis…

18.1 k8s服务组件之4大黄金指标讲解

本节重点介绍 : 监控4大黄金指标 Latency&#xff1a;延时Utilization&#xff1a;使用率Saturation&#xff1a;饱和度Errors&#xff1a;错误数或错误率 apiserver指标 400、500错误qps访问延迟队列深度 etcd指标kube-scheduler和kube-controller-manager 监控4大黄金指标 …

PHPMailer在PHP5.3.3以下版本的使用详解

《PHPMailer在PHP5.3.3以下版本的使用详解》 PHPMailer是一款广泛使用的PHP邮件发送类库&#xff0c;它提供了一套完整的邮件发送解决方案&#xff0c;包括SMTP验证、HTML邮件支持等功能。在PHP5.3.3及以下版本的环境中&#xff0c;由于语言特性和库的限制&#xff0c;选择适合…

【学习笔记】TLS/SSL握手

前言&#xff1a;本篇将介绍TLS握手的实际握手过程&#xff0c;TLS握手创建了Client和Server之间“被保护的通道”&#xff0c;2个单向通道用来保护批量数据的传输&#xff08;通过Confidentiality、Integrity和Authentication&#xff09;&#xff0c;一个通道是从Client到Ser…

辞职后你说你想去外面玩玩,我看你寸步未行,原来你是去了JDK以外的方面玩玩

按需阅读 兄弟们&#xff01;我被面试官吊打了Java面试Question A&#xff1a;如果距离世界末日只剩一天你能干什么&#xff1f;面试官&#xff1a;世界末日前我想看视频面试官&#xff1a;给点创意好不好&#xff1f;面试官&#xff1a;如果有一天我想换个姿势看图片 Java面试…

C++基础:第一个C++程序

初学C #include<iostream> int main() {std::cout << "Enter two numbers:" << std::endl;int v1 0, v2 0;std::cin >> v1 >> v2;std::cout << "The sum of "<< v1 << " and " << v2&…

string和oj题以及vector的接口介绍

前言 上篇博客学习了一些string类的模拟实现erase、find、substr、比较大小、流输入、流输出&#xff0c;这篇博客将介绍剩下的一些string的知识以及vector的一些使用方式。 string 传统深拷贝的写法 //拷贝构造 string(const string& s) {_str new char[s._capacity …

1.4 边界值分析法

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言1 定义2 选取3 具体步骤4 案例分析 本篇文章参考黑马程序员 前言 边界值分析法是一种广泛应用于软件测试中的技术&#xff0c;旨在识别输入值范围内的潜在缺陷。本文将详细探讨…

【Linux】深度解析与实战应用:GCC/G++编译器入门指南

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…

Mysql—主从复制的slave添加及延迟回放

MySQL 主从复制是什么&#xff1f; ​ MySQL 主从复制是指数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式&#xff0c;这样从节点不用一直访问主服务器来更新自己的数据&#xff0c;数据的更新可以在远程连接上进行&#xff0c;…

滑动窗口专题

通过以下几道题来熟悉滑动窗口 滑动窗口3大问题&#xff1a;如何移入窗口&#xff0c;如何移出窗口&#xff0c;如何更新答案 209. 长度最小的子数组 我们考虑通过窗口来计算和&#xff0c;快慢指针从左开始遍历。 移入窗口&#xff1a;直接把当前元素加进来。 移出窗口&am…

重大喜讯!科研界之大变革——“5分钟提交+24小时反馈”,投稿效率直线上升!

盘点允许“一稿多投”的SCI “一稿多投”一直被认为是学术不端的行为&#xff0c;但“禁止一稿多投”是纸质时代遗留下的产物&#xff0c;已不符合当今社会的发展。 一篇文章一审就是好几个月甚至是一两年&#xff0c;在科研圈子里都是平常事&#xff0c;每个科研人都曾深陷于…

乐道L60、MONA M03、理想L6,蔚小理围剿「特斯拉」

作者 |老缅 编辑 |德新 9月19日&#xff0c;蔚来全新品牌乐道首款车型——乐道L60正式上市&#xff0c;定位家庭智能电动SUV。 60kWh标准续航版&#xff0c;售价20.69万元85kWh长续航版&#xff0c;售价23.59万元&#xff1b;如果采用BaaS电池租用服务&#xff0c;则低至14.9…

如何在云端使用 Browserless 进行网页抓取?

云浏览器是什么&#xff1f; 云浏览器是一种基于云的组合&#xff0c;它将网页浏览器应用程序与一个虚拟化的容器相结合&#xff0c;实现了远程浏览器隔离的概念。开发人员可以使用流行的工具&#xff08;如 Playwright 和​ Puppeteer​&#xff09;来自动化网页浏览器&#…

cmake--list

教程 list--链接 list关键字的作用 list的操作 list追加字符串--APPEND set(str1 "aaaaaaaa") message(STATUS "str1${str1}") list(APPEND str1 "bbbb") message(STATUS "str1${str1}") list字符串拼接并不是直接拼接&#xff0c…

C# 用Timer控件简单写一个倒计时60s功能

先放界面上一个Label和一个Timer控件&#xff0c;Label用来展示倒计时秒数 添加事件 设置属性&#xff0c;设置每隔一秒执行一次 放代码&#xff1a; //设置时间控件开始运行&#xff0c;具体放在哪里看具体需求 this.timer1.Start();//定义一个全局变量表示秒数 int time…

在线版宣传册是如何制作的

​亲爱的创作者们&#xff0c;你是否想过将传统的纸质宣传册升级为更具吸引力的在线版&#xff1f;在这个数字化时代&#xff0c;在线版宣传册不仅能够节省印刷成本&#xff0c;还能让信息传递更加迅速、精准。今天&#xff0c;就让我们一起探索在线版宣传册的制作奥秘吧&#…

利用Mongoose库实现MQTT通信

Mongoose官方Github地址 官方对于Mongoose的简介&#xff1a; Mongoose - Embedded Web Server / Embedded Network Library Mongoose is a network library for C/C. It provides event-driven non-blocking APIs for TCP, UDP, HTTP, WebSocket, MQTT, and other protocol…