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

[优选算法专题四.前缀和——NO.25一维前缀和]

题目链接:

一维前缀和

题目描述:

题目解析:

代码逐部分解析

读取输入数据

int n, q;
cin >> n >> q;
vector<int> arr(n + 1);  // 数组下标从1开始(便于前缀和计算)
for (int i = 1; i <= n; i++) cin >> arr[i];
  • n 表示数组的长度,q 表示查询的次数。
  • 定义arr数组时大小为n+1,且从下标1开始存储元素(而非 0),这是为了后续前缀和计算更方便(避免处理i=0的边界问题)。

构建前缀和数组dp

vector<long long> dp(n + 1);  // 用long long防止整数溢出
for (int i = 1; i <= n; i++) {dp[i] = dp[i - 1] + arr[i];
}
  • dp是前缀和数组,其中dp[i]表示arr[1] + arr[2] + ... + arr[i]的和。
  • 采用long long类型是为了避免当数组元素较大或n较大时,累加和超过int的范围导致溢出。
  • 递推关系:dp[i] = dp[i-1] + arr[i],即前i个元素的和 = 前i-1个元素的和 + 第i个元素。

处理区间和查询

int l = 0, r = 0;
while (q--) {cin >> l >> r;cout << dp[r] - dp[l - 1] << endl;
}
  • 每次查询输入区间[l, r],需要计算arr[l] + arr[l+1] + ... + arr[r]
  • 利用前缀和数组的性质:区间[l, r]的和 = 前r个元素的和 - 前l-1个元素的和,即dp[r] - dp[l-1]
  • 这种查询方式的时间复杂度是O(1),配合预处理的O(n)时间,整体效率远高于每次查询都遍历区间的O(n*q)复杂度,尤其适合q较大的场景。

注意:为什么下标要从一开始

1. 前缀和公式更直观

前缀和数组dp[i]的定义是 “前i个元素的和”(即arr[1] + arr[2] + ... + arr[i])。当计算区间[l, r]的和时,公式为:区间和 = dp[r] - dp[l-1]

如果下标从 1 开始:

  • l=1时,l-1=0,而dp[0]可以自然定义为0(前 0 个元素的和),此时公式变为dp[r] - dp[0],直接等于arr[1]到arr[r]的和,无需额外处理边界。

2. 避免下标越界或特殊判断

如果下标从 0 开始:

  • 前缀和dp[0]表示arr[0]的和,dp[i] = dp[i-1] + arr[i]
  • 当查询区间[0, r]时,区间和需要用dp[r] - dp[-1],但dp[-1]是无效下标(越界),此时必须单独判断l=0的情况(比如让dp[-1]等价于 0),会增加代码复杂度。

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

相关文章:

  • openharmony之分布式相机开发:预览\拍照\编辑\同步\删除\分享教程
  • LeetCode 402 - 移掉 K 位数字
  • 皮卡丘XSS
  • 思维|栈
  • 关于网站建设方案的案例数码产品销售网站建设策划书
  • 2025年10月17日
  • Entity Framework Core和SqlSugar的区别,详细介绍
  • 【C语言】运算符
  • 网站备案帐号是什么菏泽微信小程序制作
  • 消息队列以及RabbitMQ的使用
  • PyCharm之服务器篇|Linux连接校园网Neu版
  • 在linux上训练深度学习环境配置(Ubuntu)
  • 洗车小程序系统
  • 网站 备案 营业执照太仓网站设计早晨设计
  • 煤矿网站建设WordPress高端主题 熊
  • 告别炼丹玄学:用元学习精准预测模型性能与数据需求,AWS AI Lab研究解读
  • 无需 VNC / 公网 IP!用 Docker-Webtop+cpolar,在手机浏览器远程操控 Linux
  • Vue3与Cesium:轻量版3D地理可视化实践
  • 数据预处理(音频/图像/视频/文字)及多模态统一大模型输入方案
  • 一段音频多段字幕,让音频能够流畅自然对应字幕 AI生成视频,扣子生成剪映视频草稿
  • Linux-网络安全私房菜(二)
  • 广州外贸网站建设 open需要做网站建设的公司
  • QML学习笔记(四十三)QML与C++交互:上下文属性暴露
  • Redis 的字符串底层实现
  • 递归-206.反转链表-力扣(LeetCode)
  • 【Linux系列】掌控 Linux 的脉搏:深入理解进程控制
  • 百度怎么注册公司网站wordpress 2019主题谷歌字体
  • 算法14.0
  • 基于掌纹生物特征的 Windows 安全登录实践:从物理安全到零信任身份验证
  • uniapp map地图添加浮层