前缀和算法 -- [模版]一维前缀和

 个人主页:Lei宝啊 

愿所有美好如期而遇


目录

本题链接

输入描述

输出描述

算法分析

算法一:暴力求解

算法二:前缀和

预处理前缀和dp表

使用前缀和dp表

解题源码


我们以一道题目为例详解一维前缀和原理。 

 

本题链接

【模板】前缀和_牛客题霸_牛客网 

输入描述

首先第一行输入两个整数,n和q,n是要输入的数组的元素个数,q是要查询的次数,查询时输入l和r,代表着要查询的数组区间

比如:我们的示例:

  • n = 3,我们输入的数组元素就有三个:1 2 4
  • q = 2,我们就需要查找两次,l和r也就会更新两次,要查询的数组区间也就是[1,2] [2,3]

值得注意的是n和q都大于等于1,至于为什么要这么给,我们后面讲算法会说到。 

输出描述

返回要查询的数组区间内所有元素值的和。

算法分析

算法一:暴力求解

直接遍历数组,从给定区间开始遍历q次,我们分析一下时间复杂度:首先有q次的遍历,并且我们考虑最坏的情况,就是每次数组都是从头遍历到尾,时间复杂度就为O(q*N),按我们本题最大的q和n来看,这么干绝对是超时的。

算法二:前缀和
预处理前缀和dp表

类似于动态规划的dp表,这里的dp表每个元素都表示一个状态,由于我们的n是从1开始的,那我们的dp[1]就用来表示区间[1,1]的和,dp[1]表示区间[1,2]的和,看图更直观些:

我们可以用一个变量sum来表示和,然后通过遍历数组给dp表赋值。 

使用前缀和dp表

那么我们如何使用dp表来求取数组区间的元素和呢?

我们dp表第i个位置就表示从下标0到下标i所有元素的和,比如我们要算[2,3]区间,也就是求这个区间的元素和,就是dp[3]-dp[1],我们也就能推知一个公式:

区间和 = dp[r] - dp[l-1];

解题源码

#include <iostream>
#include <vector>
using namespace std;int main() 
{int n = 0, q = 0;cin >> n >> q;vector<int> v(n+1,0);for(int i=1; i<v.size(); i++) cin >> v[i];//创建dp表,并填值vector<long long> dp(n+1,0);long long sum = 0;for(int i=1; i<v.size(); i++){sum += v[i];dp[i] = sum;}//查询while(q--){int l, r;cin >> l >> r;cout << dp[r] - dp[l-1] <<endl;           }
}
// 64 位输出请用 printf("%lld")

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DICOM医学图像浏览器

各位医疗IT的小伙伴们大家好&#xff0c;近期打算换一份工作&#xff0c;于是利用业余时间&#xff0c;结合自己的所学&#xff0c;参考小蚂蚁的界面&#xff0c;编写了一款医学图像浏览器。 开发环境&#xff1a;vs2013、QT5.8、DCMTK3.6.7、VTK8.1.2、OpenCV2.4.10 下面简单…

【面向对象项目之图书馆管理系统】

项目需求 不同的用户有不同的菜单&#xff0c;然后进行操作。 设计思路 通过需求我们可以提取图书类&#xff0c;书架类 图书类存放图书的基本信息&#xff0c;书架类存放书本及其它的数量&#xff0c;以及操作图书的方法等等。接口类&#xff08;用来操作书架里面的图书&…

LeetCode74二分搜索优化:二维矩阵中的高效查找策略

题目描述 力扣地址 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&…

PE解释器之前期准备工作

一&#xff1a;什么是PE解释器 PE解释器通常指的是Portable Executable&#xff08;PE&#xff09;文件格式的解释器。PE是一种可执行文件和库文件的标准格式&#xff0c;主要用于32位和64位版本的Windows操作系统。PE文件包含程序的二进制代码、数据、资源以及与可执行文件相关…

RK3568平台 Android13 GKI架构开发方式

一.GKI简介 GKI&#xff1a;Generic Kernel Image 通用内核映像。 Android13 GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像&#xff0c;是google为了解决内核碎片化的问题&#xff0c;而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加…

2024年山东省中职“网络安全”试题——B-3:Web安全之综合渗透测试

B-3&#xff1a;Web安全之综合渗透测试 服务器场景名称&#xff1a;Server2010&#xff08;关闭链接&#xff09; 服务器场景操作系统&#xff1a;"需要环境有问题加q" 使用渗透机场景Kali中的工具扫描服务器&#xff0c;通过扫描服务器得到web端口&#xff0c;登陆…

envoy在arm机器上的编译整理

版本信息&#xff1a; 操作系统:GUN Linux操作系统AARCH64架构。istio-proxy版本&#xff1a;istio-proxy1.15.2 编译环境搭建&#xff1a; 设置代理&#xff0c;确保可以访问Google等外网&#xff0c;这里envoy的第一次编译需要从外网下载依赖库。// 备注&#xff1a;这里一定…

爬虫实战-微博评论爬取

简介 最近在做NLP方面的研究&#xff0c;以前一直在做CV方面。最近由于chatgpt&#xff0c;所以对NLP就非常感兴趣。索性就开始研究起来了。 其实我们都知道&#xff0c;无论是CV方向还是NLP方向的模型实现&#xff0c;都是离不开数据的。哪怕是再先进的代码&#xff0c;都是…

深度学习|3.6 激活函数 3.7 为什么需要非线性激活函数

激活函数 主要有sigmoid函数、tanh函数、relu函数和leaky relu函数 tanh函数相比sigmoid函数是具有优势的&#xff0c;因为tanh函数使得输出值的平均值为0&#xff0c;而sigmoid函数使得输出值的平均值为1/2&#xff0c;对下一层来说tanh输出的0更好进行处理。 激活函数tanh…

Debezium发布历史40

原文地址&#xff1a; https://debezium.io/blog/2018/09/20/materializing-aggregate-views-with-hibernate-and-debezium/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 使用 Hibernate 和 Debezium 实现聚合…

【排序算法】【二叉树】【滑动窗口】LeetCode220: 存在重复元素 III

作者推荐 【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值 本文涉及的基础知识点 C算法&#xff1a;滑动窗口总结 题目 给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。 找出满足下述条件的下标对 (i, j)&#xff1a; i ! j, abs(i - j) < indexDi…

Vue 插槽:让你的组件更具扩展性(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…