自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 蓝桥杯第17169题——兽之泪II

这个方法错误的原因在于,对于一个较大的x,可能会有一个相当小的y,直白的说,帅怪的顺序可能是x1,x2,x5,y5,y5,y5……我们会考虑到遍历每组数据的所有x值,其比yi小的记录到cost里,但这种方式并不会超时,但是会有另外的问题:如果比yi小的x值数量已经满足n滴眼泪的要求,我们就需要提前返回最小的n个x值总和,如果是乱序的,每次从第一个x开始遍历,那么就无法找到不考虑y只考虑x的最小能量消耗情况(也就是只挑选部分怪兽打一次就够了的情况,无法计算出最小的x总和)在怪兽谷中,有 k 只怪兽。

2024-04-22 16:48:01 1078

原创 蓝桥杯第859题——旅行

Z 小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光。Z 小镇附近共有 n 个景点(编号为 1,2,3,…,n),这些景点被 m 条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路。也许是为了保护该地的旅游资源,Z 小镇有个奇怪的规定,就是对于一条给定的公路 ri​,任何在该公路上行驶的车辆速度必须为 vi​。速度变化太快使得游客们很不舒服,因此从一个景点前往另一个景点的时候,大家都希望选择行使过程中最大速度和最小速度的比尽可能小的路线,也就是所谓最舒适的路线。

2024-04-16 20:27:42 509

原创 蓝桥杯第2152题——红绿灯

, 达到瞬移的效果, 但是爱丽丝是遵纪守法的好市民, 在每个红绿灯前她都会停下氮气喷射, 即使是绿灯, 因为红绿灯处有斑马线, 而使用氮气喷射 装置通过斑马线是违法的。爱丽丝在最开始直接使用氮气喷射装置瞬间到达第一个红绿灯, 然后绿灯通过, 以最高速行进 60 秒后到达第二个红绿灯, 此时绿灯刚好变红, 于是她等 待 20 秒再次变为绿灯后通过该红绿灯, 此时氮气喷射装置冷却完毕, 爱丽丝再 次使用瞬间到达公司, 总共用时 80 秒。爱丽丝要开车去上班, 上班的路上有许多红绿灯, 这让爱丽丝很难过。

2024-04-12 16:40:36 690

原创 蓝桥杯第1121题——蓝桥公园

这是一道典型的floyd算法模版题,floyd算法相当暴力,时间复杂度O(n^3),适用于像这种只有小几百个点的情况,这种数据量我们不需要考虑其他算法,并且它可以一次计算出所有点到所有点的最短距离 ,对于多次查询的时间复杂度是O(1)。但是小明的体力有限,对于每个计划他想走最少的路完成,你可以帮帮他吗?如果要输出路径,则需要定义一个path数组,需要注意初始化的时候path[i][i] = i表示节点自己到自己的前置节点就是它自己,每连接一条边,都要将path数组做对应更新,最后使用dfs输出路径。

2024-04-05 16:23:36 302

原创 蓝桥杯第793题——排水系统

每一个排水结点有若干个管道用于汇集其他排水结点的污水(简称为该结点的汇集管道),也有若干个管道向其他的排水结点排出污水(简称为该结点的排出管道)。排水系统中还有若干个最终排水口,它们将污水运送到污水处理厂,没有排出管道的结点便可视为一个最终排水口。其中体积使用分数形式进行输出,即每行输出两个用单个空格分隔的整数 p,q,表示排出的污水体积为。现在各个污水接收口分别都接收了 1 吨污水,污水进入每个结点后,会均等地从当前结点的每一个排出管道流向其他排水结点,而最终排水口将把污水排出系统。

2024-04-02 19:16:43 991

原创 蓝桥杯第1593题——二进制问题

那么比111更大的数即代表着第一个数一定填1,在第二个区间中,我们是在第一个数填1的情况下,考虑第三个数不填1的排列数,即剩下1个位置填2个1满足要求——dp[1][2]。这样分的理由是,第一个数不填1,考虑剩下3个位置填3个1的方法总数,这不就正好是在000~111这个长度为3的二进制序列中填3个1的排列总数吗,即dp[3][3]。第三个区间考虑在第一个位置和第三个位置都填1的情况下,第四个位置不填1的情况,那么就要加上在剩下0个位置填1个1的组合数——dp[0][1]。输出一个整数表示答案。

2024-04-01 23:03:43 672

原创 统计数码出现的个数

上述算法基于[1, n]的数码数量,对于[n, m]之间的数码数量则可以先计算[1, m]和[1, n-1],再在对应数码位上进行相减即可。

2024-04-01 16:37:43 523

原创 蓝桥杯第131题——生命之树

上帝要在这棵树内选出一个非空节点集 S,使得对于 S 中的任意两个点 a,b,都存在一个点列 a,v1​,v2​,⋯,vk​,b 使得这个点列中的每个点都是 S 里面的元素,且序列中相邻两个点间有一条边相连。题目说对于集合S中任意的两个点,都存在一条能连起来的路径,指的是S中所有的点都能在其中加上S中别的点连起来,其实就是寻找一颗权值最大的子树,千万。这是一道经典的树形dp,树形dp是结合dfs与递推计算的解题手法,用于在树和图的结构中进行递推计算,该题就是一个经典的应用场景。

2024-03-31 12:30:50 460

原创 蓝桥杯第642题——跳蚱蜢

在考虑单点bfs找最短路径的情况,我们可以想象原点是一颗由上至下的4叉树,那么题目的答案20,意味着我们要向下分出20层才能找到答案,树会不断往底部扩展,越是向下的层数,所需要计算的节点就越是多,如果我们没有去重,想象一个完整的20层4叉树,它是非常巨大的。所以我们考虑有哪些蚱蜢可以跳到空盘子上,进一步思考,就是空盘子可以与哪些蚱蜢交换位置,很明显,如图所示,0号空盘可以与2、1、8、7号蚱蜢交换位置,这就为我们提供了搜索路径的灵感;其中 8 只盘子内装着 8 只蚱蜢,有一个是空盘。

2024-03-18 16:13:47 1058

原创 蓝桥杯第1167题——荷马史诗

在这个地方我们尤其需要关注到一个细节,对于二叉树而言我们每次一定会选取两个节点不用担心这个问题,但对于k叉树,我们要尽量让叶子结点更靠近最终树的根结点,如果按照我们当前这样的设计由下至上的构建二叉树,就会让叶子结点聚到底端,使得每个单词所对应的k进制串都尽量的长,那么就违背题意和霍夫曼编码的初衷了。题目的描述很长,解释的有点过于多,但其实如果你是计算机专业的学生,知道霍夫曼编码,题目的内容就不难理解了,反之则不然,我仅在此处简单的对霍夫曼编码的关键部分进行讲述,具体内容读者可以去搜索相关资料。

2024-03-14 17:59:03 1048

原创 蓝桥杯第1595题——和与乘积

虽然我们可以考虑到使用大数类,但不妨我们考虑一下,如果满足要求的结果是区间积等于区间和,那么如果从某个时刻起,区间积已经比理论区间和的最大值还要大了,是不是就可以停下来了,那么不难发现,理论区间和最大值就是2e5 * 2e5。进一步思考,既然区间积的变化速度那么快,即便只有2,连续起来的增长速度也远超区间和的增长速度,而区间积的增长速度要想比区间和慢,使最终达到平衡,那就只有1这个值是满足要求的。符合条件的区间为 [1,1], [1,3], [2,2], [3,3], [3,4], [4,4]。

2024-03-12 12:16:59 999

原创 蓝桥杯第1390题——A Careful Approach

对于测试一个t值是否满足要求,大的框架就是使用dfs,如果飞机没有降落,那么降落时间一定要在data[i][0]和data[i][1]之间,所以首先对理想中的最优降落时间——上一架飞机的降落时间+t,与目标飞机的最早降落时间取最大值,然后再与最晚降落时间取最小值。而本题还有一个坑点,就是关于单位的问题,首先它给的是分钟却要我们精确到秒,那我们当然是用秒来二分更好,因此我们首先将所有数据放大60倍变成秒,但这样做还是会导致通过率只有57.1%,原因是对于秒数量级还要进行四舍五入。输入的最后一行是一个零。

2024-03-04 20:42:21 616

原创 蓝桥杯第1374题——锻造兵器

蓝桥杯第1374题——锻造兵器,排序并利用双指针思想扩展为四指针

2024-02-22 12:37:33 601

原创 java内部类初探

内部类是定义在另一个类中的类,它曾经对于简洁地实现回调非常重要,不过今天lambda表达式在这方面可以做的更好。但内部类对于某些结构的构建还是很有用的。

2023-11-10 23:29:01 165

原创 Comparator接口与Lambda表达式

在你学习过Lambda表达式和java的函数引用之后,你就可以进一步了解Comparator这个接口了,它提供了很多有用的方法,以及很多函数式接口的参数供你使用,本质的目的是为了让你可以尽可能简单的编写一个排序方法。注:本文末尾提供完整的代码。

2023-11-08 00:00:07 525

原创 蓝桥杯第3513题——岛屿个数

解题思路全在代码注释中,本题作者使用bfs方式作答。

2023-11-03 23:10:53 496 1

原创 java中hashCode方法的深入讨论

本文从hashCode的诞生原因和意义讲起,并讲解了多种创建hashCode()的方法,以及在什么情况下应该使用什么方式,希望能对你的学习产生帮助。同时你也可以使用谷歌开源的AutoValue框架自动生成对应的equals和hashCode方法,现在很多的IDE编译器也有自带这种类似的功能,在你了解原理之后,同样也是推荐使用这两种方式的。

2023-11-01 20:57:00 96

原创 java正确销毁二叉树的方法

1.java与C/C++对于内存回收有着本质的区别,java是将对象引用置空来让垃圾回收器在适当的时候回收对象的内存空间,而C/C++则可以手动释放一个对象。2.java的按值传递使得对象的引用副本只能修改原对象中的内容,而做不到改变原引用的指向,这一点需要尤其注意。

2023-10-17 10:52:34 106

原创 java函数的按值传递

因此在本文一开始的案例中,由于path所指向的ArrayList始终是同一个对象,即便递归中的每个栈帧都有一个独立的path引用,但它们始终共享的是同一片内存空间。所以你现在明白了吧,对于引用型变量,它们在递归的时候,往往为了确保对象(ArrayList)在每个栈帧中都有独立的不同的状态,你需要在适当的时候对其做回溯操作。

2023-10-16 22:02:45 46

原创 优先考虑以来注入来引用资源

有许多类在应用时会依赖一个或多个底层资源。但是这样的方法有一个明显的局限,就是dictionary作为检查拼写的依赖,它是被写死的,固定死的一个常量,在依赖固定,且数量较少时我们可以使用这种手段。但我们是否有一个好的方法可以让这个类支持大量依赖,甚至是动态的依赖?

2023-10-13 20:49:22 38

原创 创建不可实例化的类

有时候可能需要编写只包含静态方法和静态域的类,这些类的名声不太好,因为有些人喜欢在面向对象的java中用这种方式写过程化的程序(当然,我做算法题的时候一般是这么做的)。但有些工具类例如Math类,就需要这么去定义,这种工具类我们只使用它们提供的静态方法,或静态字段,因此我们不需要实例化它们,那我们应当怎么做呢?

2023-10-13 12:40:12 42

原创 SingleTon单例设计

虽然提升这个单例类的安全性使得代码变得比原来复杂的多,但这是非常有益的,因为现代JVM有着高度优化过的垃圾回收器,使得轻量级的对象创建与回收效率相比维护一个自己定义的对象池其实在效率上要更好一些,所以我们只会在对一些非常重量级的对象设计上使用单例设计模式,而这些重量级的对象往往在安全上也非常的核心和重要,因此通过必要的逻辑保证安全性是非常重要的。

2023-10-13 11:35:56 20

原创 对于Map类的内容一致性判断方法

今天在刷leetcode 242号题目的时候想到了使用Map类的特性,但尝试发现Map类并不能像集合类一样直接使用equals方法判断内容一致性,于是将该问题抛给了chatGPT,于是chatGPT给了我两种方式解决这个问题,由于第二种方法作者水平有限,故仅提供chatGPT的陈述。

2023-10-12 19:29:57 710

原创 java集合类的算法库

就像C++的STL一样,java的集合类也提供了一些常用的算法,用于满足你的基本算法要求,比如排序,混排,二分查找等。

2023-09-23 23:30:58 67

原创 java集合类的副本与视图

视图是一种对原集合的映射,可以通过视图来"看到"原集合,但视图又并非只能看(读)不能写的视窗,各种各样的视图介于原集合与视窗之间,意在对原集合进行一些列有所限制的操作。

2023-09-20 20:30:12 55

原创 java中常用的Map类型

Map类型指的是映射类型,用于存放键值对。键就像id一样不可重复,但值是可以出现重复的。例如员工id可以映射到一个具体的员工属性类型。本文主要讲述HashMap和TreeMap类,以及其核心内容。

2023-09-19 12:45:57 179

原创 java中常用的集合类

集合用于存放数据,不同的集合使用不同的数据结构,根据数据结构的不同,集合类表现出不同的特性和效率,如查询效率、插入效率等。本文将介绍如下常用的集合类:ArrayList、LinkedList、ArrayDeque、HashSet、TreeSet、PriorityQueue、HashMap。List和Set类型的集合实现了Collection接口,而Map类型的集合则实现了Map接口。

2023-09-17 14:57:26 156

原创 java的特殊集合类

本文将介绍一些不算常用的特殊集合类,包括LinkedHashSet、LinkedHashMap、WeakHashMap、IdentityHashMap、EnumSet、EnumMap、BitSet、Properties。

2023-09-16 22:52:37 54

原创 java接口的一些细节

接口(interface)用来描述类应该做什么,而不是制定它们具体应该如何做。接口不是类,而是对希望符合这个接口的类的一组需求。类可以实现接口,使用关键字implements,一个类可以实现多个接口。java不允许多重继承(extends),但允许实现多个接口;多重继承会让语言变得十分复杂(如C++)或是让程序运行效率降低(如Eiffel);但java接口可以提供多重继承的大多数好处,同时还能避免多重继承的复杂性和低效性。

2023-08-31 11:20:41 35

原创 java中的回调思想与Timer类

回调是java的一种编程思路,旨在将一系列操作封装在一个对象中,并将这个对象传递给另一个方法,以便这个方法在需要的时候(返回去)调用那个对象中的操作。Timer类就是典型的运用了这个编程思想,这个类提供的功能就是执行定时操作,而具体的操作就封装在我们定义的类中,Timer类对象可以选择多久之后执行我们定义的方法,这个执行逻辑和方法就是典型的回调。

2023-08-30 17:35:16 66

原创 java利用反射编写泛型copy数组代码

应该记得,Arrays类中的copyOf方法可以进行任意类型的数组复制,而这样一个支持泛型的数组复制具体是怎么实现的呢,其实利用的就是反射的特性。我们来编写一下这个方法。你可能会好奇,既然Arrays.copyOf()方法中调用了System.arrayCopy()方法,那为什么不在数组复制的时候统一使用System.arrayCopy()方法呢?首先,使用System.arrayCopy()方法的入参多达5个,这会让代码的编写变得复杂繁琐。

2023-08-28 17:27:36 59

原创 java反射——运行时分析具体对象

在java反射初学篇中,我们了解了可以使用反射获取一个指定的类的信息,只要知道类的名字或者给定一个具体的对象,我们就可以获取到这个类的变量(Field)、方法(Method)、构造方法(Constractor),并且我们可以调用这些内容。本节我们将学习如何利用反射,分析一个具体的实例化的对象,其目标就是获取其对象的状态。

2023-08-28 12:51:10 40

原创 java的equals方法的深入讨论

而第二种方式适用于只在某个基类上判断是否符合条件,比如说判断两个员工是否相同,只需要判断员工id是否相同,而不论工资是否相同,也不论是否是继承于Employee类的经理或者主管,这时Employee就可以定义一个final的equals方法,使得代码简化,并且防止了其子类不必要的equals定义。

2023-08-22 11:41:16 93

原创 java的几个重要关键字

本篇以通俗易懂的语言讲解java中的this、super、static、private、protected、final关键字。

2023-08-20 10:45:20 40

原创 java 16记录类的相关概念

有的时候我们只需要一个很简单的类,像是常量一样,其成员变量在new过后基本不会改变,我们希望把这些成员变量定义为private final类型,这个时候就可以使用到在java 14中预览、java 16正式发布的记录(record) 类,用于简化这种简单类的创建。

2023-08-19 10:09:45 59

原创 java对象的浅克隆和深克隆

在java的应用中,我们不免的会需要获得一个完全一模一样的对象,在操作新对象的时候不希望旧的对象被改变,如果直接加一个对相同对象的引用,那么修改新对象的时候实际上修改的是与原对象相同的内存空间,达不到我们的目的。此时我们就需要对对象进行克隆,而关于对象的克隆,就有浅克隆和深克隆两种,浅克隆仅能满足简单的对象克隆,而较为复杂的对象,就需要用深克隆才能实现了。

2023-08-17 13:56:55 77 1

原创 java对private修饰的变量和方法的访问

对自己之前对private修饰的严重理解错误进行记录,并展现一个极易被忽视的特性。1.一定要记住private修饰的变量和方法仅限于类的内部使用,而不是仅它自己可以使用,否则会误认为只要得到了一个对象的引用就可以直接访问自己的私有字段。2.如果想要给出一个访问自己私有变量方法,可以设定并使用get、set方法。3.同一个类的方法可以自由的直接访问自己这个类的私有成员,在实际中可以简化编程,例如在重写一个类的compareTo()方法时,可以不必使用get()方法获取。

2023-08-17 13:35:48 988 1

原创 java空指针的显性预防和测试

在java中我们不鼓励创建引用型变量而不确定指向,这会导致难以维护的空指针异常,而有些时候我们也可以在代码中显性的处理可能出现的空指针异常,这里就提到了Object类中提供的两个静态方法,requireNonNullElse()和requireNonNull()。1.对于可能出现的空指针异常,我们可以选择赋一个值继续执行,也可以抛异常结束执行。2.对于抛异常结束执行,可以直接调用Object的方法;

2023-08-17 11:35:02 185 1

原创 java打印本月日历

按照周一到周日为一行的顺序打印本月日期,并将当天的日期用"*"表示。此题意在加深学习者对于java日期类的综合理解。1.LocalDate类可以很方便的处理日期相关的计算,可以获取年月日星期等信息。2.获取年月日的方法的返回值均为int——getYear()、getMonthValue()、getDayOfMonth()。3.getDayOfWeek()方法返回的类型是DayOfWeek不是int,获取数值还需要再使用getValue()方法。4.可以使用minusDays()和plusDays()方法来对

2023-08-16 14:40:42 437 1

原创 java抽球游戏

现在有40个球序号分别为1至40,我们希望从中抽取6个不重复的球,并将其按从小到大的方式展示其序号。此题意在提升学习者对java数组的综合理解能力。1.对随机数生成,数组排序,数组输出测试这几个关键功能的进行了解和学习。2.对数组进行充分了解学习,灵活使用循环中的i下标,得到我们所需要的数据。3.可以对球的总数、抽取数量两个参数使用常量代替,提高程序的易修改性。4.可以通过异常处理的方式,控制球总数不及抽取数量的数组下标越界异常。

2023-08-15 11:54:30 70

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除