蓝桥杯冲刺:一维前缀和

系列文章目录

蓝桥杯系列:一维前缀和


文章目录

  • 系列文章目录
  • 前言
  • 一、暴力的写法:
  • 二、一维前缀和的模板:
    • 具体实现:
  • 三、具体例题:求和
    • 1.题目参考:
    • 2.以下是具体代码实现:
  • 总结


前言

    上次我介绍了一下模拟和枚举类的题目,这次我想给大家介绍一种必会的思想,就是一维前缀和,因为假设我们要确定一个区间的和,我们每次确定一个范围就是遍历一次,时间复杂度有可能会很高,而我们如果构建出来前缀和数组的话就方便很多了,下面我们来看具体的:


 前缀和是以空间换时间

一、暴力的写法:

        先给大家来看一种暴力的写法,这种相信大家只要思路是对的应该都可以直接写出来。

           

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();      // 数组长度int q = scan.nextInt();      // 查询次数int[] arr = new int[n + 1];  // 假设数组从索引1开始存储(方便输入)// 读取数组元素(1-based)for (int i = 1; i <= n; i++) {arr[i] = scan.nextInt();}// 处理每个查询for (int j = 0; j < q; j++) {int l = scan.nextInt(); // 区间左端点int r = scan.nextInt(); // 区间右端点// 暴力累加区间和int sum = 0;for (int k = l; k <= r; k++) {sum += arr[k];}System.out.println(sum);}scan.close();}
}

   

这种方式

  1. 超时风险:​ 当 n = 1e5 且 q = 1e5 时,总操作次数高达 1e10,远超程序的时间限制(通常 1秒内只能处理约 1e8 次操作)。
  2. 重复计算:​ 相同区间多次查询时,暴力法会重复计算,而前缀和只需一次预处理。

二、一维前缀和的模板:

        

       具体实现:

       

public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...int t = 1;while(t>0){solve(scan);t--;}scan.close();}public static void solve(Scanner scan){int n = scan.nextInt();int q = scan.nextInt();int[] arr = new int[n+1];int[] pre = new int[n+1];arr[0] = 0;pre[0] = 0;for(int i = 1;i<=n;i++){arr[i] = scan.nextInt();pre[i] = pre[i-1]+arr[i];//将前缀和确定}  for(int j = 0;j<q;j++){int l = scan.nextInt();int r = scan.nextInt();System.out.println(pre[r]-pre[l-1]);}       }}

      这个就是创建出来了一个前缀和数组,然后开始进行赋值。   

        下面我们通过这个画像来帮大家形象的理解一下:

                 

   这个就是用画图来具体的给大家来呈现的方式。

三、具体例题:求和  

    题目参考:

 

     

这也是一道有关前缀和的题,我们分析题可以发现一些规律

    a1(a2+....+an) +a2(a3+....+an)+a3(a4+....+an)

      所以通项就是:ai(a(i+1)+.....+a(n))

这道题还有一种考点,就是要用合适的数据类型来判断,因为S的值可能会超过int类型,int类型大概范围是2*10的9次方,而long的大概范围是9*10的18次方,这个很明显会超过int范围,所以所以sum应该定义为long类型。而arr[i]*(pre[n]-pre[i])也有可能溢出,所以我们也要把arr[i]转换为long类型的,防止出错。
   

以下是具体代码实现:

    

public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...int n = scan.nextInt();System.out.println(sum(n,scan));scan.close();}//这也是一道有关前缀和的题,我们分析题可以发现一些规律//a1(a2+....+an) +a2(a3+....+an)+a3(a4+....+an)//所以通项就是:ai(a(i+1)+.....+a(n))public static long sum(int n,Scanner scan){int[] arr = new int[n+1];int[] pre = new int[n+1];arr[0] = 0;pre[0] = 0;                for(int i = 1;i<=n;i++){arr[i] = scan.nextInt();pre[i] = pre[i-1]+arr[i];//计算前缀和的和                     }long sum = 0;for(int i = 1;i<n;i++){sum += (long)arr[i]*(pre[n]-pre[i]);}return sum;}}

 对于一维前缀和数组来说:

时间复杂度大幅降低

  • 暴力法:每次查询需要遍历区间 [l, r],时间复杂度为 O(n)。
  • 前缀和:预处理 O(n),之后每次查询只需 O(1)。

总结

  以上就是今天要讲的内容,其实前缀和就像一个基本的组件可以作为其他算法的组件,像动态规划等等,下面我们讲dp的时候我也会给大家更新的,接下来我会一直给大家更新蓝桥杯的算法题的,大家一起加油,积极向上就完了。

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

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

相关文章

使用UDP建立连接,会存在什么问题?

使用UDP建立连接&#xff0c;会存在可靠性、有序性、连接状态管理等方面的问题&#xff1a; 1、数据传输不可靠&#xff1a; UDP没有确认和重传机制&#xff0c;发送方发送数据后&#xff0c;不会等待接收方的确认消息。这意味着如果数据在传输过程中丢失&#xff0c;发送方不…

YOLOv5配置训练以及华为昇腾910B推理

参考文章&#xff1a; 保姆式yolov5教程&#xff0c;训练你自己的数据集 - 知乎 Windows 10|11下安装mmyolo-0.5.0版本 - 知乎 Ubuntu22.04安装教程&基于华为Ascend AI处理器的om模型atc转换环境安装_ubuntu安装atc工具-CSDN博客嵌入式AI---在华为昇腾推理自己的yolov5目标…

基于yolov11的汽车损伤检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的汽车损伤检测系统是一种先进的计算机视觉技术&#xff0c;旨在快速准确地识别汽车的各种损伤类型。该系统利用YOLOv11模型的强大性能&#xff0c;实现了对车辆损伤的精确检测与分类。 该系统能够识别的损伤类型包括裂纹&#xff08;crack&#xff…

[ 3分钟算法 ] | 递归搜索题目 : 合并两个有序链表(递归版)

目录 1. 题目链接&#xff1a; 2. 思路分析&#xff1a; 1. 重复子问题&#xff1f; 2. 具体子问题&#xff1f; 3. 递归出口&#xff1f; 3. 代码实现&#xff1a; 4. 小结&#xff1a; 1. 循环(迭代) vs 递归 2. 递归 vs 深搜 1. 题目链接&#xff1a; 21. 合并…

单元测试原则之——不要模拟值对象 (1)

1. 什么是值对象(Value Objects)? 值对象是指那些不可变且仅通过其属性(数据)来定义的对象。它们通常没有复杂的逻辑或行为,主要用于存储和传递数据。例如: ● 字符串(String) ● 数字(Integer, Double) ● 日期(LocalDate, Instant) ● 自定义的简单数据类(如…

【软件】在Windows和Ubuntu上使用TFTP和NFS

在Windows和Ubuntu上使用TFTP和NFS 零、介绍 最近在玩Linux开发板&#xff0c;在开发的过程中发现需要用到tftp和nfs来帮助传输文件&#xff0c;故此记录如何使用这两种软件。 TFTP&#xff08;Trivial File Transfer Protocol&#xff09; &#xff1a;是一种简化的文件传输…

JS判断变量是否为空的方法

在 JavaScript 中&#xff0c;判断变量是否为空需要根据不同的数据类型和具体需求来处理。以下是常见场景的解决方案&#xff1a; 1. 基础判断&#xff1a;null 或 undefined javascript if (value null || value undefined) {// 变量为空 } 或简写为&#xff1a; javasc…

Linux更换挂载nfs迁移数据流程

当前&#xff1a;原nfs&#xff08;10.16.2.1:/myData&#xff09;挂载在/myData&#xff0c;新的nfs&#xff08;10.16.2.2:/myData&#xff09;未挂载 目标&#xff1a;把旧nfs的数据迁移到新的nfs上&#xff0c;并把新nfs挂载到/myData 步骤&#xff1a; 1、新nfs挂载到一…

深入解析音频:格式、同步及封装容器

物理音频和数字音频 物理音频 定义&#xff1a;物理音频就是声音在自然界中的物理表现形式&#xff0c;本质上是一种机械波&#xff0c;通过空气或其他介质传播。例如&#xff0c;当我们说话、乐器演奏或物体碰撞时&#xff0c;都会产生振动&#xff0c;这些振动会引起周围介…

AI与.NET技术实操系列(四):使用 Semantic Kernel 和 DeepSeek 构建AI应用

1. 引言 在人工智能技术飞速发展的今天&#xff0c;大型语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为智能应用开发的核心驱动力。从智能客服到自动化内容生成&#xff0c;LLMs的应用正在深刻改变我们的工作和生活方式。 对于.NET开发者而言&#xff0c;…

导出cad实体所有信息到txt并打开(生成唯一文件名) ——c#cad二次开发

效果如下: 建议在保存时指定编码为UTF-8&#xff1a; using (StreamWriter sw new StreamWriter(filePath, false, Encoding.UTF8)) { // 写入内容 } 最终 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD…

Redis 源码硬核解析系列专题 - 第一篇:Redis源码入门与整体架构

1. 引言 Redis作为一个高性能的内存键值数据库,其源码以简洁高效著称。通过解析Redis源码,我们可以深入理解其单线程模型、事件驱动机制以及模块化设计的精髓。本篇将从Redis的源码目录结构入手,剖析其整体架构,并聚焦启动流程和事件循环的核心实现。 2. Redis源码目录结构…

异步加载+内存分析

异步加载 Resources和AB包的同步加载与异步加载对比代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class AsyncLoad : MonoBehaviour {// Start is called before the first frame updatev…

将视频m4s文件转换为mp4格式

将视频m4s文件转换为mp4格式 一般情况&#xff1a;偏大的文件为视频&#xff0c;偏小的文件为音频。 环境要求&#xff1a;下载并安装ffmpeg&#xff0c;并配置好环境变量&#xff0c;如下图&#xff1a; 转换代码&#xff1a; import subprocessdef merge_m4s_to_mp4(vide…

EXCEL报错:无法共享此工作薄,因表包含excel表或xml映射的解决方法

在分享工作薄是&#xff0c;如果出现了“无法共享此工作薄&#xff0c;因表包含excel表或xml映射”的报错&#xff0c;那么有两个原因&#xff1a; 1.包含Excel表格&#xff0c;这个也是相对比较常见的原因。 首先选中表格。如果你不知道表的位置在哪&#xff0c;那么在Excel左…

w2ui 水平滚动移动 虚拟列 数据丢失

https://w2ui.com/web/docs/1.5/w2grid.disableCVS https://github.com/vitmalina/w2ui/issues/1398 解决方案来源 问题现象: 窗口缩小 导致多列 出现水平滚动,滚动时触发本地样式重绘,导致record undefined,从而引发多列报错 解决方案: 使用 disableCVS : true 一次加载到d…

在ensp进行OSPF+RIP+静态网络架构配置

一、实验目的 1.Ospf与RIP的双向引入路由消息 2.Ospf引入静态路由信息 二、实验要求 需求&#xff1a; 路由器可以互相ping通 实验设备&#xff1a; 路由器router7台 使用ensp搭建实验坏境&#xff0c;结构如图所示 三、实验内容 1.配置R1、R2、R3路由器使用Ospf动态路由…

基于mediapipe深度学习和限定半径最近邻分类树算法的人体摔倒检测系统python源码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Mediapipe人体姿态检测原理 4.2 限定半径最近邻分类树算法原理 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 人工智能算法python程序运行环…

deep-sync开源程序插件导出您的 DeepSeek 与 public 聊天

一、软件介绍 文末提供下载 deep-sync开源程序插件导出您的 DeepSeek 与 public 聊天&#xff0c;这是一个浏览器扩展&#xff0c;它允许用户公开、私下分享他们的聊天对话&#xff0c;并使用密码或过期链接来增强 Deepseek Web UI。该扩展程序在 Deepseek 界面中添加了一个 “…

苹果签名是否一定安全呢?

苹果签名是一种数字签名技术&#xff0c;用于验证应用程序的来源和完整性。当开发者将应用程序提交到苹果应用商店时&#xff0c;苹果会对应用进行签名&#xff0c;这个签名包含了开发者的身份信息以及应用的相关数据。用户安装应用时&#xff0c;设备会验证签名的有效性&#…