模块四:一维前缀和模板——DP34 【模板】前缀和

文章目录

  • 题目描述
  • 算法原理
    • 解法一:暴力解法(时间复杂度为O(n*q))
    • 解法二:前缀和(时间复杂度为O(n)+O(q))
      • 细节问题
  • 代码实现
    • C++
    • Java

题目描述

题目链接:DP34 【模板】前缀和
在这里插入图片描述
根据描述第一句可得数组长度应设为n + 1
在这里插入图片描述

算法原理

解法一:暴力解法(时间复杂度为O(n*q))

使用模拟,每次都遍历一遍数组求[l,r]区间的和,总共q次。

解法二:前缀和(时间复杂度为O(n)+O(q))

PS:前缀和可以用来快速求出数组中某一连续区间的和
先预处理出来⼀个「前缀和」数组:

  • ⽤ dp[i] 表⽰: [1, i] 区间内所有元素的和,那么 dp[i - 1] ⾥⾯存的就是 [1, i-1]区间内所有元素的和,那么:可得递推公式: dp[i] = dp[i - 1] + arr[i] ;
  • 使⽤前缀和数组,快速求出某⼀个区间内所有元素的和:当询问的区间是 [l, r] 时:区间内所有元素的和为:dp[r] - dp[l - 1] 。

细节问题

为什么我们的下标要从1开始计数?

  • 为了处理边界情况。
  • 初始化:添加虚拟节点(辅助节点)

代码实现

C++

#include <iostream>
#include <vector>
using namespace std;int main() {//1.读取数据int n,q;cin >> n >> q;vector<int> arr(n + 1);for(int i = 1;i <= n;i++)cin >> arr[i];//2.预处理出来一个前缀和数组vector<long long> dp(n + 1);//防止溢出for(int i = 1;i <= n;i++)dp[i] = dp[i - 1] + arr[i];//3.使用dpwhile(q--){int l,r;cin >> l >> r;cout << dp[r] - dp[l - 1] << endl;}return 0;
}

Java

import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int q = scan.nextInt();
// 为了防⽌溢出,⽤ long 类型的数组int[] arr = new int[n + 1];long[] dp = new long[n + 1];for (int i = 1; i <= n; i++) { // 读数据arr[i] = scan.nextInt();}for (int i = 1; i <= n; i++) { // 处理前缀和数组dp[i] = dp[i - 1] + arr[i];}while (q > 0) {int l = scan.nextInt();int r = scan.nextInt();System.out.println(dp[r] - dp[l - 1]); // 使⽤前缀和数组q--;}}
}

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

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

相关文章

编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 编写…

个人学习-前端相关(2):ECMAScript 6-箭头函数、rest、spread

ES6的箭头函数 ES6允许使用箭头函数&#xff0c;语法类似java中的lambda表达式 let fun1 function(){} //普通的函数声明 let fun2 ()>{} //箭头函数声明 let fun3 (x) >{return x1} let fun4 x >{return x1} //参数列表中有且只有一个参数&#xff0c;()可…

支持向量机(SVM)详细介绍

一、SVM基本概念 支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;是一种二分类模型&#xff0c;它的基本模型是定义在特征空间上的间隔最大的线性分类器。SVM的核心思想是寻找一个超平面&#xff0c;将不同类别的样本点分开&#xff0c;并且使得…

LeetCode题目74:搜索二维矩阵

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

kubebuilder(3)实现operator

在前面的文章我们已经了解了operator项目的基本结构。现在我们来写一点简单的代码&#xff0c;然后把我们的crd和operator部署到k8s集群中。 需求 这是一个真实的需求&#xff0c;只不过做了简化。 在开发公司自己的paas平台&#xff0c;有一个需求是&#xff0c;用户在发版…

FFMpeg - macOS build 报错 : xcrun -sdk iphoneos clang ...

文章目录 报错1&#xff1a;xcrun -sdk iphoneos clang is unable to create an executable file报错 2 &#xff1a; error: unknown type name AudioDeviceID; 在 macOS 上使用 https://github.com/kewlbear/FFmpeg-iOS-build-script 脚本&#xff0c;运行 ./build-ffmpeg.sh…

236基于matlab的三维比例导引法仿真

基于matlab的三维比例导引法仿真&#xff0c;可以攻击静止/机动目标。1.三维空间内的比例导引程序&#xff0c;采用龙哥库塔积分法&#xff1b;2.文件名为bili3dnew的.m文件是主函数&#xff0c;执行时需调用目标机动子函数、导引律子函数、数值积分法子函数&#xff1b;3.文件…

模拟LinkedList实现的双向链表

1. 前言 前文我们用java语言实现了无哨兵的单向链表.稍作修改即可实现有哨兵的单向链表.有哨兵的单向链表相较与无哨兵的而言&#xff0c;其对链表的头结点的增删操作更为方便.而在此我们实现了带有头节点和尾节点的双向链表(该头节点和尾节点都不存储有效的数据). 2. 带有头…

统计建模——模型——python为例

统计建模涵盖了众多数学模型和分析方法&#xff0c;这些模型和方法被广泛应用于数据分析、预测、推断、分类、聚类等任务中。下面列举了一些常见的统计建模方法及其具体应用方式&#xff1a; 目录 1.线性回归模型&#xff1a; ----python实现线性回归模型 -------使用NumPy…

计算机网络—网络层

一、网络层的功能 网络层的任务 主要任务是通过路由器实现网络互联&#xff0c;进而实现数据报在各网络之间的传输 “数据报”就是从数据链路层接收的分组好的数据&#xff0c;又叫“IP数据报”或“IP分组” 网络层提供的两种服务 1面向连接的虚电路服务 当两台计算机进行…

阿里云安装Mysql

阿里云安装Mysql 1、下载mysql包&#xff0c;并解压包2、继续解压文件3、拷贝到安装目录4、创建mysql组和用户5、创建mysql数据目录&#xff08;根目录&#xff09;6、赋予权限7、加入路径8、配置文件顺序&#xff1a;9、初始化mysql10、启动mysql&#xff08;结尾加"&…

【C++】---STL容器适配器之queue

【C】---STL容器适配器之queue 一、队列1、队列的性质 二、队列类1、队列的构造2、empty()3、push()4、pop()5、size()6、front()7、back() 三、队列的模拟实现1、头文件&#xff08;底层&#xff1a;deque&#xff09;2、测试文件3、底层&#xff1a;list 一、队列 1、队列的…

VulnHub靶机 DC-系列合计 通关攻略手册

VulnHub靶机 DC靶机系列 通关手册 DC-1&#xff1a;Vulnhub靶机 DC-1 渗透详细过程 DC-2&#xff1a;Vulnhub靶机 DC-2 渗透详细过程 DC-3&#xff1a;Vulnhub 靶机 DC-3 实战系列 渗透详细过程 DC-4&#xff1a;VulnHub系列 DC-4靶机 渗透详细过程 DC-5&#xff1a;VulnH…

Java基础_集合类_List

List Collection、List接口1、继承结构2、方法 Collection实现类1、继承结构2、相关类&#xff08;1&#xff09;AbstractCollection&#xff08;2&#xff09;AbstractListAbstractSequentialList&#xff08;子类&#xff09; 其它接口RandomAccess【java.util】Cloneable【j…

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址&#xff1a;Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本&#xff0c;作为经典分布式订阅、发布的消息传输中间件&#xff0c;kafka在实时数据处理、消息队列、流处理等领域具有广泛…

【NTN 卫星通信】NTN应该使用FDD还是TDD双工模式

1 概述 现在主流的商用地面通信系统一般都支持FDD和TDD两种模式&#xff0c;实用于不同的频段。那么卫星通信也需要有这两种模式吗&#xff1f; 2 NTN 双工模式分析 在考虑TDD模式时&#xff0c;需要设置保护时间&#xff0c;以防止终端同时发射和接收。该保护时间直接取决于终…

容器安全-镜像扫描

前言 容器镜像安全是云原生应用交付安全的重要一环&#xff0c;对上传的容器镜像进行及时安全扫描&#xff0c;并基于扫描结果选择阻断应用部署&#xff0c;可有效降低生产环境漏洞风险。容器安全面临的风险有&#xff1a;镜像风险、镜像仓库风险、编排工具风险&#xff0c;小…

【ZZULIOJ】1085: 求奇数的乘积(多实例测试)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 给你n个整数&#xff0c;求他们中所有奇数的乘积 输入 输入数据包含多个测试实例&#xff0c;每个测试实例占一行&#xff0c;每行的第一个数为n&#xff0c;表示本组数据一共有n个&#xff0c;接…

计算机网络第十七天(第一天的答案)

网络互连复习笔记 1、ospf三张表&#xff1a;路由表、邻居表、链路状态数据库 2、组播地址的含义&#xff1a; 224.0.0.5所有的ospf路由器 224.0.0.6所有的ospfDR路由器 3、ospf报文类型&#xff1a; Hello(组播) 用于发现直连链路上的ospf邻居和维护ospf邻居…

Python_AI库 Matplotlib的应用简例:绘制与保存折线图

本文默认读者已具备以下技能&#xff1a; 熟悉Python基础语法&#xff0c;以自行阅读python代码块熟悉Vscode或其它编辑工具的应用 在数据可视化领域&#xff0c;Matplotlib无疑是一个强大的工具。它允许我们创建各种静态、动态、交互式的可视化图形&#xff0c;帮助我们更好…