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

算法学习日记 | 前缀和

🧠 算法学习日记 | 今天我用「前缀和」解了两道题,原来“预处理”能这么强!

大家好,我是你们的算法学习搭子 👋
今天继续我的算法入门之旅,重点练习了**前缀和(Prefix Sum)**这一高效的数据预处理技巧。

很多人觉得“前缀和”只是用来快速求区间和的工具,但其实,它是一种通过空间换时间的典型思想。
只要我们提前把信息存好,就能在 $ O(1) $ 时间内回答任意查询。

今天我完整做了两道题,每一道都坚持用最朴素的前缀和逻辑实现。下面我把题目原文我的原始代码原封不动贴出来,不做任何删减或美化,只为真实记录学习过程。


🔹 题目一:区间次方和

问题描述
给定一个长度为 $ n $ 的整数数组 $ a $ 以及 $ m $ 个查询。
每个查询包含三个整数 $ l, r, k $,表示询问 $ l \sim r $ 之间所有元素的 $ k $ 次方和。
请对每个查询输出一个答案,答案对 $ 10^9 + 7 $ 取模。

输入格式
第一行输入两个整数 $ n, m $,其含义如上所述。
第二行输入 $ n $ 个整数 $ a[1], a[2], \ldots, a[n] $。
接下来 $ m $ 行,每行输入三个整数 $ l, r, k $,表示一个查询。

输出格式
输出 $ m $ 行,每行一个整数,表示查询的答案对 $ 10^9 + 7 $ 取模的结果。

样例输入

5 3 1 2 3 4 5 1 3 2 2 4 3 3 5 1

样例输出

14 99 12

评测数据规模
对于 100% 的评测数据:$ 1 \leq n, m \leq 10^5,,1 \leq a[i] \leq 100,,1 \leq l \leq r \leq n,,1 \leq k \leq 5 $。

✅ 我的代码

#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constll N=1e5+9;ll a[6][N],prefix[6][N];constll p=1e9+7;intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);intn,m;intl,r,k;cin>>n>>m;for(inti=1;i<=n;++i)cin>>a[1][i];for(inti=2;i<=5;++i){for(intj=1;j<=n;++j){a[i][j]=(a[i-1][j]*a[1][j])%p;}}for(inti=1;i<=5;++i){for(intj=1;j<=n;++j){prefix[i][j]=(prefix[i][j-1]+a[i][j])%p;}}for(inti=0;i<m;++i){cin>>l>>r>>k;cout<<((prefix[k][r]-prefix[k][l-1]+p)%p)<<endl;}return0;}

🔹 题目二:小郑的蓝桥平衡串

问题描述
平衡串指的是一个字符串,其中包含两种不同字符,并且这两种字符的数量相等。

例如,abababaababb都是平衡串,因为每种字符各有三个,而abaabaaaab都不是平衡串,因为它们的字符数量不相等。

平衡串在密码学和计算机科学中具有重要应用,比如可以用于构造哈希函数或者解决一些数学问题。

小郑拿到一个只包含 $ L、、Q $ 的字符串,他的任务就是找到最长平衡串,且满足平衡串的要求,即保证子串中 $ L、、Q $ 的数量相等。

输入格式
输入一行字符串,保证字符串中只包含字符 $ L、、Q $。

输出格式
输出一个整数,为输入字符串中最长平衡串的长度。

样例输入

LQLL

样例输出

2

评测数据规模
对于所有评测数据,输入字符串的长度 $ len \leq 1000 $。

✅ 我的代码

#include<bits/stdc++.h>usingnamespacestd;constintN=1010;intprefix[N];intmain(){string s;cin>>s;intn=s.length();prefix[0]=0;for(inti=0;i<n;++i){if(s[i]=='L'){prefix[i+1]=prefix[i]+1;}else{prefix[i+1]=prefix[i]-1;}}intans=0;for(intl=0;l<=n;++l){for(intr=l+1;r<=n;++r){if(prefix[r]==prefix[l]){intlen=r-l;if(len>ans)ans=len;}}}cout<<ans;return0;}

🌟 我的思考

这两道题虽然看起来完全不同,但都用了前缀和的思想

  • 区间次方和:先预处理出每个幂次的前缀和,再用 $ \text{sum}[r] - \text{sum}[l-1] $ 快速回答查询。
  • 平衡串:用prefix[i]表示从开头到第 $ i $ 位,LQ的差值。当两个位置的prefix值相等时,说明中间子串是平衡的。

你会发现:

前缀和的本质是“信息压缩”—— 把一段区间的统计信息,压缩成一个数值,方便后续快速查询。

而且,前缀和不仅能处理“和”,还能处理“差”、“出现次数”、“奇偶性”等抽象状态。

比如在平衡串中,我们并不关心具体有多少个LQ,只关心它们的相对数量差。这个差值的变化可以用前缀和来追踪。


✅ 总结

  • 前缀和的核心是:预处理 + 快速查询
  • 适用于多次查询同一数组区间的问题
  • 可以扩展到二维、多维、非数值型(如字符计数)
  • 关键在于定义合适的“前缀值”(如和、差、次数等)
  • 时间复杂度:预处理 $ O(n) $,每次查询 $ O(1) $

如果你也在刷算法题,不妨试试今天这三道题,用最直白的前缀和方法做一遍。
有时候,简单的预处理,也能带来巨大的效率提升。

欢迎在评论区贴出你的解法,我们一起交流进步!👇

http://www.jsqmd.com/news/370203/

相关文章:

  • 2026最新!降AI率工具 千笔·专业降AIGC智能体 VS 云笔AI,MBA专属更高效
  • 如何为不同年龄段儿童选牙膏?2026年儿童牙膏品牌全面评测与推荐,直击防蛀核心痛点 - 品牌推荐
  • 2026年儿童牙膏品牌推荐:基于多年龄段实测评价,针对刷牙抗拒与配方温和痛点 - 品牌推荐
  • 交稿前一晚!8个AI论文平台测评:本科生毕业论文写作全攻略
  • Python数据分析:pyecharts可视化
  • 2026最新网络营销与直播电商/厨师培训/烹饪工艺与营养培训/面点培训/中西面点工艺培训/大数据与会计/电子商务/业财数据应用与管理推荐:植根厨乡沃土,铸就专业育人典范 - 品牌推荐2026
  • RBAC前端架构-06:使用localstorage及Vuex用户信息存储逻辑
  • 深入解析:华为HuaweiCloudStack(一)介绍与架构
  • .NET框架 - NETCORE + API + EF(DBFirst) + PostgresSql
  • 聊聊电动重型货架、电移动货架靠谱生产商,哪家性价比高 - 工业设备
  • 全球口服抗衰营养保健品风向标,为什么盼生派NMN 2026年会值得重点投资? - 速递信息
  • 微信立减金不浪费!自用省钱+闲置回收技巧,新手也能轻松上手 - 可可收
  • 微生物限度检测仪靠谱厂家推荐:关键参数解析+主流品牌实测数据对比 - 品牌推荐大师
  • 5分钟搭建完整后端服务,这款开源的快速开发神器太牛了! - Lafite
  • 2026年儿童牙膏品牌推荐:基于多年龄段实测评价,针对刷牙抗拒与口味挑剔难题 - 品牌推荐
  • 2026最新烹饪院校推荐!中国厨师之乡/陈派豫菜/营养配餐优质院校权威榜单发布 - 品牌推荐2026
  • 聚焦2026年1月,XRNM源头厂家口碑好的排行榜单,目前比较好的XRNM企业行业优质排行榜亮相 - 品牌推荐师
  • 2026最新业财数据应用与管理专业推荐!国内优质院校权威榜单发布,适配餐饮产业发展需求 - 品牌推荐2026
  • 追踪调试
  • 知识库,RAG(Embedding模型和向量数据库),MCP(Function Calling)
  • 网络流杂谈
  • Git 分支使用规范
  • Claude Code 小白指北(二):五个“暗号”,让 Claude Code 干活更听话
  • 2026最新大数据与会计专业推荐!国内优质院校权威榜单发布,特色办学助力职业发展 - 品牌推荐2026
  • 分期乐购物额度如何回收?便捷流程一步到位 - 团团收购物卡回收
  • 2026最新烹饪工艺与营养培训推荐!国内优质机构权威榜单发布,助力厨艺技能与营养专业能力提升 - 品牌推荐2026
  • 2026年新中式实木全屋定制推荐:权威评测揭晓 - 品牌推荐
  • 线性表之链表的介绍和启用
  • 徽科特露点仪在冶金行业使用靠谱吗,口碑品牌大揭秘 - 工业品网
  • 2026最新面点培训推荐!国内优质面点培训院校权威榜单发布,中国厨师之乡/陈派豫菜/营养配餐场景适配 - 品牌推荐2026