【算法】基础算法004之前缀和

2024-06-29 1453阅读

【算法】基础算法004之前缀和

👀樊梓慕:个人主页

 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》

🌝每一个不曾起舞的日子,都是对生命的辜负


前言

本篇文章为大家带来前缀和算法,前缀和算法可以以O(1)的时间复杂度快速求出某一段连续区间的和,这个连续区域既可以是一维的也可以是二维的。


欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。 

=========================================================================

GITEE相关代码:🌟樊飞 (fanfei_c) - Gitee.com🌟

=========================================================================


1.⼀维前缀和

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com)【算法】基础算法004之前缀和https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId=230&tqId=2021480&ru=/exam/oj&qru=/ta/dynamic-programming/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196

【算法】基础算法004之前缀和

 前缀和:可以快速求出某一段连续区间的和。

本道题目如果使用暴力计算的话会超时,所以需要进行优化。

前缀和解题模板

  1. 第一步:预处理出来一个前缀和数组,比如本题dp[i]表示1-i区间内所有元素的和,且dp[i]=dp[i-1]+arr[i];
  2. 第二步:使用前缀和数组,比如本题求[l,r]区间元素的和就是dp[r]-dp[l-1];

#include 
#include 
using namespace std;
int main() {
    // 1.输入数据
    int n,q;
    cin>>n>>q;
    vector arr(n+1);
    for(int i=1;i>arr[i];
    // 2.预处理出来一个前缀和数组
    vector dp(n+1);
    for(int i=1;i>l>>r;
        coutm>>q;
    vector arr(n+1,vector(m+1));
    for(int i=1;iarr[i][j];
    // 2.预处理前缀和矩阵
    vector dp(n+1,vector(m+1));
    for(int i=1;ix1>>y1>>x2>>y2;
        cout
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]