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

《算法通关指南:算法基础篇 --- 一维前缀和(1)—1. 【模板】前缀和,2.最大子段和》

《算法通关指南:算法基础篇 ---- 一维前缀和— 1. 【模板】前缀和,2.最大子段和》


在这里插入图片描述

🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《C语言》《算法》KelpBar海带Linux智慧屏项目
《coze智能体开发平台》
永远相信美好的事情即将发生

在这里插入图片描述

文章目录

  • 《算法通关指南:算法基础篇 ---- 一维前缀和— 1. 【模板】前缀和,2.最大子段和》
  • 前言
  • 一、前缀和
  • 二、一维前缀和
    • 2.1 核心问题
      • 2.1.1 构建一维前缀和
      • 2.2.2 利用前缀和数组求解区间【l,r】内元素的和
    • 三、一维前缀和经典算法题
    • 3.1【模板】前缀和
      • 3.1.1题目
      • 3.1.2 算法原理
      • 3.1.3代码
    • 3.2 最大子段和
      • 3.2.1 题目
      • 3.2.2 算法原理
      • 3.2.3 代码
  • 总结与每日励志


前言

本系列讲解算法竞赛的数据结构在算法竞赛中,我们主要关心的其实是时间开销,空间上是基本够用的,因此我们是使用庞大的数组实现的话不多说冲!


一、前缀和

前缀和与差分的核心思想是预处理,可以在暴力枚举的过程中,快速给出查询的结果,从而优化时间复杂度。是经典的用空间替换时间的做法

二、一维前缀和

2.1 核心问题

2.1.1 构建一维前缀和

核心公式: f[i] = f[i − 1] + a[i]
在这里插入图片描述

2.2.2 利用前缀和数组求解区间【l,r】内元素的和

核心公式: f[r] − f[l − 1]

在这里插入图片描述

三、一维前缀和经典算法题

3.1【模板】前缀和

3.1.1题目

链接:【模板】前缀和

在这里插入图片描述

3.1.2 算法原理

依照刚才讲解前缀和原理模拟即可

3.1.3代码

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
typedef long long LL;  //数组大小最大1e9相加会超过int,故用long long
LL a[N];
LL f[N]; //前缀和数组
int main()
{int n,m;cin >> n >> m;for (int i = 1; i <= n; i++)cin >> a[i];//从1开始,f[i - 1] = f[0] = 0,可以有效避免i - 1 = -1 使得数组越界 for (int i = 1; i <= n; i++)f[i] = f[i - 1] + a[i];while (m--){int l, r;cin >> l >> r;//[l,r]区间cout << f[r] - f[l - 1] << endl;}return 0;
}

3.2 最大子段和

3.2.1 题目

链接:最大子段和
在这里插入图片描述

3.2.2 算法原理

考虑以i 位置的元素a[i] 「为结尾」的最大子段和:
• 如果想要最大子段和,也就是最大区间和,那么用f[i] 减掉⼀个前驱最小值即可。
因此,我们可以创建前缀和数组,然后在遍历前缀和数组的过程中,⼀边更新前驱最小值,⼀边更新当前位置为结尾的最大子段和。

3.2.3 代码

#include <iostream>
using namespace std;
const int N = 2e5 + 10; 
typedef long long LL;
LL f[N]; //构建前缀和数组
int main()
{int n;cin >> n;for (int i = 1; i <= n; i++){int x;cin >> x;f[i] = f[i - 1] + x;}LL ret = -1e20;  //前缀和可能为负数LL pre = 0;  //以1为结尾的前缀和前驱最小为0for (int i = 1; i <= n; i++){ret = max(ret, f[i] - pre);pre = min(pre, f[i]); //寻找【1,i】区间的最小值}cout << ret << endl;return 0;
}

总结与每日励志

✨本文讲解了算法竞赛中的一维前缀和算法,通过预处理数组实现快速区间查询,有效优化时间复杂度。文章详细介绍了前缀和的核心公式(f[i] = f[i-1] + a[i])和区间求和公式(f[r]-f[l-1]),并通过两个典型例题《前缀和模板》和《最大子段和》进行实战演示,展示了如何用前缀和思想解决实际问题。最后以"永远相信美好的事情即将发生"作为励志结语,鼓励读者坚持算法学习。全文简洁清晰,兼顾理论讲解与代码实现,适合算法初学者参考学习。

在这里插入图片描述

http://www.dtcms.com/a/593875.html

相关文章:

  • 英文网站设计多少钱wordpress qux
  • 编程语言排行榜2025年11月
  • 现在网站开发的前端语言如何做百度推广
  • 多粒子模型--交通堵塞
  • wordpress快速仿站视频教程wordpress如何进数据库
  • 做的ASP网站手机石家庄seo扣费
  • 扫二维码进入个人的购物网站如何做软件外包公司绩效考核内容
  • iOS的事件响应链
  • iOS Widget 开发-9:可配置 Widget:使用 IntentConfiguration 实现参数选择
  • 教育网站报名网络推广100种方法免费
  • 班级网站设计论文网站制作与网站建设技术
  • 卓拙科技做网站吗网站建设期末论文
  • 【App开发】Android Studio 安装插件(比如通义灵码)
  • 在线生成个人网站注册建设通网站首页
  • 栖霞建设采购网站用wordpress插件推荐
  • 网站开发前后端语言2017主流网站开发语言
  • 数仓开发中口径发散如何治理?
  • SEO网站建设入驻程流网页游戏排行2020前十名
  • EasyGBS/EasyNVR高并发适配!PostgreSQL部署指南
  • 网站开发公司怎么选择动态交互网站建设
  • 杭州网站的建设企业管理软件的发展趋势
  • git如何回退到指定提交
  • 自己做网站用中文为什么是乱码大型网站开发 优帮云
  • 六爻观测基础(四)——地支
  • 抖音官网链接网站怎么做缪斯设计公司
  • Uniapp ECG心电图组件
  • 高性能抗干扰两线电流型霍尔开关SC25898 | 赛卓电子重磅新品
  • 仁怀哪里有做网站的做效果图常用的网站有哪些
  • 2025 11 09 作业
  • 廊坊网站seo服务深圳市光明区官网