蓝桥杯基本算法~~~一维/二维前缀和问题

文章目录

  • 1.一维前缀和
  • 2.二维前缀和
  • 3.移动零问题
  • 4.颜色的分类问题

1.一维前缀和

问题说明:一维就是表示的是一维数组的计算,我们的这个一维前缀和是基于这个一维数组进行计算的;

什么是前缀和:就是10 20 30 40 50这个数组,13前缀和就是1~3之间的元素,这个下标是从1开始的,这个结果就是60;

如果我们的这个计算的是3~5之间的数据之和,这个就是前面的5个的和减去前面的2个的和,这个前缀和就是前面的几个数据之和;

如果不使用前缀和,我们每一次都是需要进行遍历的;

image-20241029090359847

我们的这个前缀和数组就是dp表示的,dp[i]=dp[i-1]+arr[i]这个公式计算的;

我们计算这个left~right之间的数据求和的时候,[l,r]就是这个区间,我们基于这个已经计算出来的数组,使用这个dp[r]-dp[l-1]就是我们想要得到的结果;

image-20241028211405840

下面的这个实现的代码:

public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);//1.进行数据的读入int n=in.nextInt();int q=in.nextInt();int[] arr=new int[n+1];for(int i=1;i<=n;i++){arr[i]=in.nextInt();}//2.计算前缀和数组long[] dp=new long[n+1];for(int i=1;i<=n;i++){dp[i]=dp[i-1]+arr[i];}//3.使用前缀和数组进行计算while(q>0){int l=in.nextInt();int r=in.nextInt();System.out.println(dp[r]-dp[l-1]);q--;}}
}

疑问:为什么这个下标需要从1开始计数;

如果我们从是从0开始计数,这个时候的边界情况是无法进行处理的,因为我们使用前缀和对于这个连续区间的和进行计算的时候,这个是需要使用的是我们的这个dp[r]-dp[l-1],但是如果我们的这个下标是从1开始的,如果用到这个第一个元素,这个时候的写法就是dp[0],虽然我们的这个里面没有第0个元素,但是我们把这个dp[0]=0即可,但是如果我们的这个下标是从0开始的,这个时候的这个dp[-1]就会超出我们的这个范畴,因此使用这个1作为开始下标处理这个一维前缀和二位前缀和问题也是为了更好的处理边界情况

2.二维前缀和

image-20241029081309678

如果上面的这个图示有些不懂,可以看下面的这个,下面的这个图形对于网格画了出来,而且可以更加清晰的看到关键的点对应的坐标,结合下面的这个图可以更好地理解我们上面的公式;

image-20241028215935682

下面的这个就是我们的二位前缀和的代码:

public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);//0.n表示的是我们的这个矩阵的行数,m表示的是我们的这个矩阵的列数,q表示的是我们的计算的组数int n=in.nextInt();int m=in.nextInt();int q=in.nextInt();//1.读入数据,就是我们的h行m列的数组;int[][] arr=new int[n+1][m+1];for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){arr[i][j]=in.nextInt();}}//2.下面的这个就是进行的我们的这个前缀和数组的计算;long[][] dp=new long[n+1][m+1];for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){dp[i][j]=dp[i-1][j]+dp[i][j-1]+arr[i][j]-dp[i-1][j-1];}}//3.根据我们计算的前缀和数组得到这个指定区间的数值;while(q>0){int x1=in.nextInt();int y1=in.nextInt();int x2=in.nextInt();int y2=in.nextInt();System.out.println(dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1]);q--;}in.close();}
}

其实上面的1,2两个是可以进行合并的,因为他们的这个循环的判断条件之类的就是一样的,因此我们可以把这个循环体进行合并,这个也是没有问题的;

3.移动零问题

image-20241019154955303

这个题目,之前使用C++写过一次,但是觉得这个C++写出来这个代码确实还是比较复杂的,但是这个Java的写完之后,我觉得这个比之前的那个版本更加容易理解;

刚开始的时候我们的这个fast,slow都是执行第一个元素的,然后这个时候我们的fast开始向右边进行遍历,当遇到不是0的元素的时候,把我们的这个slow指向的这个元素替换成为这个元素,然后这个slow++,fast++,追后我们的这个slow指向的元素开始的所有的元素应该都是0了,因为我们所有的不是0的元素都是已经被替换掉得了;

image-20241019155022493

4.颜色的分类问题

Leetcode75题:颜色的分类;

image-20241029085145085

这个 题目主要是要设置两个标志位

image-20241029084557560

当我们的这个cur指向的元素是0的时候,就和left指向的元素进行交换,指向1的时候,不动,指向2的时候,就和我们的right指向的元素进行交换;

其中这个cur是0的时候,我们交换完成之后,这个index和我们的这个left都是需要++的,因为我们的这个时候的left左边的这个元素其实都是0,因此这个时候我们的left是可以移动的;

但是指向1的时候,这个时候的1本来就是应该放到中间的,因此这个时候的index++即可;

指向2的时候,和右边的这个进行交换,这个时候因为交换过来的这个数值的不确定性,因此只让这个right–即可,这个时候的right指向位置右边一定都是2,因此这个right是可以进行–操作的;

应该放到中间的,因此这个时候的index++即可;

指向2的时候,和右边的这个进行交换,这个时候因为交换过来的这个数值的不确定性,因此只让这个right–即可,这个时候的right指向位置右边一定都是2,因此这个right是可以进行–操作的;

image-20241029085107263

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

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

相关文章

ubuntu20.04系统安装

文章目录 前言参考1 一、准备工作1、进入BIOS&#xff0c;设置 UEFI/Legacy Boot选项 为UEFI2、进入BIOS界面将Secure Boot禁用3、USB启动为enable 二、单系统安装1、插入U盘&#xff0c;电脑正常开机后 总结 前言 装了很多次ubuntu系统&#xff0c;整理一篇自己的文章很费时间…

JS | CommonJS、AMD、CMD、ES6-Module、UMD五种JS模块化规范

目录 前言 一、CommonJS 模块化规范 二、ES6 模块化规范 三、AMD 模块化规范 四、CMD 模块化规范 五、UMD模块化规范 前言 这三个规范都是为Js模块化加载而生的&#xff0c;使模块能够按需加载&#xff0c;使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发…

【宠物狗狗数据集】 犬类品种识别 宠物狗检测 深度学习 目标检测(含数据集)

一、背景意义 随着人们对宠物狗的喜爱日益增加&#xff0c;犬种的多样性也逐渐受到重视。狗狗不仅是家庭的好伴侣&#xff0c;更在多个领域中发挥着重要作用&#xff0c;如导盲、搜救、疗愈等。因此&#xff0c;准确识别和分类各种犬种显得尤为重要。传统的犬种识别方法往往依赖…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

虚拟机桥接模式连不上,无法进行SSH等远程操作

说明&#xff1a;以下情况在window10上遇到&#xff0c;解决后顺便做了个笔记&#xff0c;以防后续再次用到&#xff0c;也给同道中人提供一个解决方案 一、首先按照以下步骤进行检查 1、是否连接了对应的wifi 2、是否设置了桥接模式 3、上述1、2确认无误的情况下请查看右上…

线程支持库(C++11)

线程支持库包含了线程&#xff0c;互斥锁&#xff0c;线程条件变量(class thread)&#xff0c;定义于<thread> 线程提供一个并发的实例&#xff0c;需要对应一个“线程函数” 线程的主要任务就是去执行这个"线程函数" 既然线程需要提供一个线程函数&#xff0c…

ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用

本文整理于 2024 年云栖大会阿里云智能集团高级技术专家金吉祥&#xff08;牟羽&#xff09;带来的主题演讲《ApsaraMQ Serverless 能力再升级&#xff0c;事件驱动架构赋能 AI 应用》 云消息队列 ApsaraMQ 全系列产品 Serverless 化&#xff0c;支持按量付费、自适应弹性、跨可…

一款专业获取 iOS 设备的 UDID 工具|一键获取iPhone iPad设备的 UDID

什么是UDID&#xff1f; UDID&#xff0c;是iOS设备的一个唯一识别码&#xff0c;每台iOS设备都有一个独一无二的编码&#xff0c;这个编码&#xff0c;我们称之为识别码&#xff0c;也叫做UDID&#xff08; Unique Device Identifier&#xff09; 扫描后系统提示输入密码&am…

IDEA连接EXPRESS版本的SQL server数据库

我安装的版本是SQL2019-SSEI-Expr.exe 也就是EXPRESS版本的SQL Server安排非常简单和快速。 但是默认没有启动sa用户。 启动sa用户名密码登录 默认安装完以后没有启用。 使用Miscrosoft SQL Server Management Studio 使用Windows身份连接后。 在安全性》登录名中找到sa并修改…

PHP如何实现过滤用户输入

在PHP中&#xff0c;过滤用户输入是确保应用程序安全性的关键步骤之一。通过过滤用户输入&#xff0c;可以防止诸如SQL注入、XSS攻击等安全漏洞。 1. 使用PHP内置函数 1.1 filter_var() filter_var()函数是PHP中用于验证和过滤用户输入的主要函数之一。它允许你指定一个变量…

大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】

大模型&#xff0c;多模态大模型面试问题【计算图&#xff0c;LLama&#xff0c;交叉熵&#xff0c;SiLU&#xff0c;RLHF】 问题一&#xff1a;讲一讲计算图中pytorch是什么&#xff0c;TensorFlow是什么&#xff1f;1. PyTorch2. TensorFlow区别总结 问题二&#xff1a;Llama…

【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型

2024-arXiv-Lumiere: A Space-Time Diffusion Model for Video Generation Lumiere&#xff1a;视频生成的时空扩散模型摘要1. 引言2. 相关工作3. Lumiere3.1 时空 U-Net (STUnet)3.2 空间超分辨率的多重扩散 4. 应用4.1 风格化生成4.2 条件生成 5. 评估和比较5.1 定性评估5.2 …

如何使用python完成最简单的数据预测?

数据预测是数据科学和机器学习中的一个重要领域。通过分析历史数据,我们可以预测未来的趋势和结果。 本文将介绍如何使用Python进行最简单的数据预测,包括基本的概念、常用的库和一个简单的代码示例。 1. 数据预测的基本概念 数据预测是利用历史数据来预测未来事件的过程。…

k8s集群 ceph rbd 存储动态扩容

k8s 集群 rbd 扩容有两种方法&#xff0c;如下所示 通过StorageClass自动扩容 # kubectl get sc csi-rbd-sc -oyaml|grep allowVolumeExpansion allowVolumeExpansion: true如果搜索有如上字段&#xff0c;说明是可以自动扩容的&#xff0c;修改对应要扩容的 PVC容量&#xf…

如何通过接口版本控制实现向后兼容

目录 引言接口版本控制策略实现方案最佳实践常见问题与解决方案总结与建议 1. 引言 在微服务架构中&#xff0c;接口的版本控制是一个不可回避的话题。如何在保持系统稳定性的同时&#xff0c;实现接口的平滑升级&#xff1f;如何确保新版本的发布不会影响现有用户&#xff…

隨筆 20241025 Kafka数据一致性的韭菜比喻

在Kafka中&#xff0c;数据一致性是通过Leader和Follower副本之间的协调来实现的。为了更容易理解这个复杂的概念&#xff0c;我们可以用韭菜作为比喻。 韭菜的角色 Leader韭菜&#xff1a;代表数据的主导者&#xff0c;它负责更新和维护最新的数据。Follower韭菜&#xff1a…

【CPN TOOLS建模学习】设置变迁的属性

使用Tab键在属性之间进行切换 与一个变迁相关联的四个铭文&#xff0c;均为可选项&#xff1a; 变迁名称守卫(Guard)时间代码段 变迁延迟必须是一个正整数表达式。该表达式前面加上&#xff0c;这意味着时间铭文的形式为 delayexpr。在添加时间铭文之前&#xff0c;铭文的默…

uniapp 如何调用音频

uniapp调用音频 button点击 <view><button click"startPlay">开始播放</button></view>方法实现 startPlay() { const innerAudioContext uni.createInnerAudioContext();innerAudioContext.src /static/sounds/oqc.mp3;innerAudioContex…

【Mac】Homebrew

1、Homebrew 简介 官网地址&#xff1a;https://brew.sh Homebrew 是一款Mac OS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等很多实用的功能。 Homebrew 主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。 源说明br…