- 博客(105)
- 收藏
- 关注
原创 浅析Java中的LinkedList和ArrayList特点和底层
LinkedList适合于删除和插入元素的操作,对首元素和尾元素的删除和修改插入极好,ArrayList适合于元素的修改和查询。
2024-04-24 22:00:19
346
1
原创 浅析 LinkedList<Double>里的Double类型比较
先说==号的比较原理吧,在比较基本数据类型时,他比较的是基本数据类型的数值大小,但是引用数据类型时就是比较的数据的地址大小,如果我们开LinkedList并存入Double类型的数值,即使我们存入的数值一样,直接来比较这两个数值的大小也会报错。将ll1.get(0)==ll1.get(1)改为ll1.get(0)-ll1.get(1)==0。自动拆箱原理是Java的自动拆箱功能可以自动将一个对象类型转换成对应的基本类型。这是为什么呢,这就涉及到Java的自动拆箱原理和==号的比较原理。
2024-04-22 10:20:12
264
原创 Atcode搜索
因为是bfs,所以简单的证明可以知道,如果一条路径到达一个已经到达过的点,且血量还小于等于visit时,那么即使完成了任务,其步数也不会时最优的。反之,如果到达一个点,其血量值可以更大,那么这就一种可能的路径,并不是重复到达。第一个问题就交由bfs来解决。因为之后我们要使得到达这个点的能量最大才可以走这个点,如果设置为0,假如到达终点的时候能量恰好为0,那么我们在终点的上一个点能量为1,就无法向终点走了,因为终点的0并不大于visted数组,所以visited设置为-1.
2024-04-07 16:43:09
416
原创 鲁东孙老师Java课实验1java基础编程
通过键盘输入(java.util.Scanner),声明并初始化一个圆柱体的高和底面半径,PI值是Math.PI,显示输出圆柱体的体积。1:编写一个Java应用程序PrintLetters.java,输出俄文字母表。提示:俄文的第一个字符是'а',最后一个字符是:'я'编写一个程序,使用while循环计算1~1000之间能被3和7同时整除的整数之和。编写一个程序,使用for循环计算8+88+888+8888+…
2024-03-21 15:05:45
149
原创 备战蓝桥之搜索
请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!请你利用计算机的优势,帮助警察叔叔快速找到所有答案。已知的两个答案可以输出,但不计分。匪警请拨110,即使手机欠费也可拨通!
2024-03-09 20:38:58
174
原创 字符串hash
首先长度最大为100,我们以长度为1的字串为例,要查找100乘以100次也就是十的四次方,长度为100的话最多十的六次方。时间复杂度可以了,那么我们使用字符串hash来o1的查找,接着比对即可。此题有一个关键的地方在于确定好那个k之后,任意连续的k个字符组成的字符串都不相等才行。也就是说在原字符串上随意截取长度为k的字串,不会截取到一摸一样的。我们来想一想思路吧,
2024-01-29 10:49:58
128
原创 前缀数组-截断数组
问题来了,如何确定第一段的最长的长度,并类推到第二段呢?我们不妨直接设个中间量aaaa,首先在前n-1个数字中寻找累加起来等于average的,找到一个aaaa++,一旦前缀和等于average*2,就证明已经到了第二段的最小长度,这时候就将answer+aaaa,为什么是加aaaa呢,原理就是总数等于第一段的数量乘以第二段的种类数,这是是把乘法变加法。之所以我令编号小于a,不仅仅是因为aa【a】等于average*3,还有一种特殊的样例,三个0,为了规避它的影响的,我设置这个条件,顺便。
2024-01-13 20:47:37
420
原创 针对c语言的scanf读取字符和字符串解析
空白字符是指在屏幕上不会显示出来的字符,例如空格、制表符(tab)、回车、换行等。这些字符用于控制格式和布局,在文本处理中扮演着重要的角色。在C语言中,编译器在分析代码时会忽略空白字符,除非使用它们作为分隔符或作为字符常数或字符串文本元素。在输入时,例如使用scanf函数时,格式字符串中的空格会匹配并消耗输入中的一个或多个空白字符,为用户输入提供了一定的灵活性。
2023-11-26 10:16:27
2171
原创 左孩子右兄弟
我们可以发现所谓左孩子右兄弟就是说把一个节点的所有孩子节点中选取一个作为左子节点,这个节点的剩余孩子节点依次链接在这个左孩子节点的右边,直到某个节点有孩子节点再把它挂在左边。这就是左孩子右兄弟。为了从让二叉树的高度最大,我们使得根节点1的带有最多孩子节点的某个孩子节点在最下部。而我们解答题目的关键就是计算根节点有几个孩子,根节点孩子的数量同时加上以这些孩子为根节点的子树的最大深度。以此一层一层类推进行递归处理。这个题讲解一下思路。
2023-11-07 21:21:41
178
原创 二分答案之青蛙挑石头
我们想一想,小青蛙跳跃会有极限,它可以在极限内随意跳跃多大的距离,在理想情况下,小青蛙在可以分配的区间内尽可能的均衡跳跃,比如跳跃极限为2第一次在1,2这两块石头中选取1号跳跃,再一次跳到一号和二号时候,选择二号,这样实际上如果某一块石头率先被踩到0,那位之后一直选择2号(当跳跃到1,2号区间时候)。我们会发现,按照题目0与5号位置是两岸,石头们则在1到4这四个位置。我们要找到青蛙最小的跳跃范围来使得它能来回总共2n次。我们来分析一下,给个证明。
2023-11-02 19:26:25
152
原创 利用TreeMap来达成离散化的目的
TreeMap由于会自动对编号(key)排序并且内部使用二分查找(由于其是有序,按照键的大小来排序),所以找寻键和存储键值对会相对较快,但是数据多了可能会爆时间,所以还是小心使用,但这仍是一个新用途。可以考虑离散化,由于编号不连续,我们重新组织编号,也可以考虑TreeMap,利用《编号,数量》来表示。假如有一些奶牛,他们有种类的区别,我们设黑色奶牛的id为1000010000,白色为1,诸如此类以此类推还有红色等各种颜色,接下来给你一群奶牛的颜色id让你统计每种颜色的奶牛有几头。
2023-10-22 21:10:13
222
原创 利用TreeMap来解决P3029 [USACO11NOV] Cow Lineup S
0到number-1.核心逻辑是我们保证左边界所对应的编号的奶牛的数量始终为1,一旦大于一就进行递减,操作是舍弃最左边元素,就是说吧左边界往有移动一位,然后看看新的左边界是否对应的编号的奶牛的数量也是1,不是的话接着按上述操作进行。好比是从0开始到number-1,右边边界就从。好了,我们首先要统计奶牛的种类数量n,好与接下来我们记录一个范围内的奶牛的数量作比较,一旦我们统计范围内的奶牛的数量m达到我们刚开始记录的奶牛的数量n我们就开始统计最小距离.当然,首先我们要设计一个奶牛类,记录奶牛的编号和距离。
2023-10-22 19:19:32
154
原创 前缀和之最大加权矩形
二位前缀和的思路,我们使用二维前缀和来预处理,只有开四个for循环来枚举矩形的左起点和右下方的点。那么关键有了,怎么预处理压缩,使用到preaa[a][b]=preaa[a-1][b]+preaa[a][b];之后枚举第几列,这样将压缩后的值直接按照最长子段来求即可。我们首先来看一n*1的矩形来求最大加权矩形,不难发现这就是求最大子段之和。这是4*4的矩形,我们从第二行第二列开始取到第四行第四列为止。我们压缩,压缩为一行有11 9 11然后按照一维的矩形来做即可。我们可以将n*n的矩形进行压缩,怎么压缩?
2023-10-17 20:52:25
199
原创 拓扑排序之车站分级
思路是这样的,我们把所有列车为停靠的车站指向已经停靠的车站,在这里,我们要记住去重,然后我们记录这些车站的先后关系。设置分级数组,默认每个车站的等级是一级,然后我们开始拓扑排序,a号车站链接的b号车站的等级等于b号的等级和a号车站的等级加1做对比取最大。由于Java速度的局限性,即使我写了基础的快读快输,仍然在第8个样例点处tle。为什么呢,原因很简单,要最小的分级数量,那么我们就加一即可。大家可以自行去洛谷下载来验证。
2023-10-14 16:27:13
166
原创 拓扑排序求最长路
正常来讲,我们应该把1号节点入队列,再出队列,把一号节点能到达的所有的点的入度减一,并且将这些点求到达一号节点的最大距离。举个例子,一号和二号点有三条路径分别为1,2,3,我们放进队列里后,会先后跑这三段长度最后取得最优。由于3号节点还有一条入度,而2号节点我们没有初始化放入,即使他的入度为0也不能进入队列,所以3号节点无法到达,但实际1号节点可以到达3号节点,解决方法就是首先把非1号的所有的入度为0的节点先入队列,然后排除干扰,最后就可以按照原步骤进行了。这种情况下我们初始时期是只存入了一号节点所置。
2023-10-12 20:24:44
298
原创 拓扑排序的应用之杂务
这个题我们要完成一个任务前要完成前置任务,我们把路径条数换成完成这个任务的时间就是答案。拓扑排序简单应用就是找到到达一个点有几条路径。本题使用拓扑排序,在这里简单说一下思路。
2023-10-09 21:41:27
82
原创 bfs提高系列之陨石下落
你想呀,假如说你在时间0时走到了1号地点,现在时间为1了,这时我们在启动流星下落,万一流星下落到1号位置,你不就被砸死了吗,所以我们要在走前先把下一步流行落下。我们在落完流星后,我们开始往四周试探,如果这个点没被走过或者流星砸过,我们把它入优先队列的同时,判断一下他是不是最后的那个安全点,是就输出时间顺便把标记answer改为0,不是就接着走.记住流星不能超过牧场边界,而人可以,所以贝萨在走时没给他限制小于300。首先我们输入每个流星下落的地点和时间,把调用方法把所有可能会被变成不可走的点标记上,
2023-09-21 20:10:36
58
原创 最优性减枝
举个例子,我们要从乳山走到青岛,你如果乘坐汽车去,结果出了青岛,这是否就是远离我们得到目的地了,这个时候我们就将这条路线舍去,因为它超出我们的目的地了,这就是无法抵达目的地的可达性减枝。另一种情况是,我们到青岛一号路线是走500公里,二号路线是700公里,如果你选择二号路线当走到501公里时,你就会发现不合适,因为已经超出一号路线的花费了。我们在搜索时常常会进行减枝操作,通常我们的减枝分为两种,一种是我们判断是否越界的可达性减枝,一种是能够抵达最终的答案,但是耗费的代价太过于高昂,我们将其进行最优性减枝。
2023-09-20 19:31:21
75
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人