- 博客(32)
- 收藏
- 关注
原创 左神算法基础提升--5
求解该题的第一问,我们可以进行分析,数的范围为0-4294967295即为2^32-1,存储这些数我们可以使用整形数组进行存储,遍历文件的数据将文件存在的数据在数组的位置上进行描黑,之后遍历数组没有被描黑的位置即为未出现过的数,经过计算只需要约500M的数据,完全符合题意。首先一个数是4的幂之前其一定为2的幂,所以我们可以先判断这个数是否只有一个1,如果不是则其一定不是4的幂,如果是则继续判断那个1是否再从右往左的2的幂的位置上,如果是则其为4的幂。那如何判断那个1是否再从右往左的2的幂的位置上呢?
2025-01-19 16:07:08
396
原创 左神算法基础提升--4
由上述规则可知:Morris遍历一共会来到某个节点两次,第一次到达某个节点时,其会找到其左子树的最右节点,将该节点的右指针指向当前节点,当其第二次来到节点时,其会将其左子树的最右节点指向空。当某位员工不参与时,派对的快乐值为其直接下级员工参与时的快乐值与其直接下级员工不参与时的快乐值的最大值之和。2.当前节点不参与最大距离的求解;2.当前节点不参与最大距离的求解的话,最大距离为左子树的最大距离与右子树的最大距离的最大值;1.当前节点参与最大距离的求解的话,最大距离为左子树的高度加上右子树的高度加一;
2025-01-18 23:39:34
415
原创 左神算法基础提升--3
依次将数组中的数加入到栈中,如果一个数加入后会破坏其单调性,我们便需要将其弹出,同时使其弹出的数便是从右离这个数最近且比这个数小的数,其在栈中的下个数便是比该数小且左边离该数最近的数。③该点与最右回文右边界的对称点对称的点所在的回文半径数值恰好恰好等于该点到最右回文右边界的距离;①该点与最右回文右边界的对称点对称的点所在的回文半径数值小于该点到最右回文右边界的距离;②该点与最右回文右边界的对称点对称的点所在的回文半径数值大于该点到最右回文右边界的距离;2.选定为中心的字符在最右回文右边界里;
2025-01-18 21:00:56
1192
原创 左神算法基础提升--2
在经典算法中我们如果比对到一个不一样的数(X,Y)我们需要将x=x+1,y=0.但KMP算法不同,KMP算法,在比对到不相等的数时,其会让x保持不变,让y=next[y],这样便极大的减少了重复计算的过程,使所需时间大幅度减少。对于有n个元素的集合,在初始化阶段,要求用户将全部节点交给并查集,并查集会将每个元素成为一个独立的集合,即每个元素的父节点指向自己,用一个哈希表fatherMap来表示,同时将每个集合的节点数量定义为1。如果边界相碰的形式,便将这两个边界点所对的集合合并并减少一个岛的数量。
2025-01-16 23:22:09
914
原创 左神算法基础提升--1
一个字符串通过哈希函数计算得到一个哈希值,将哈希值模上规定的数组的长度,将字符串连同得到的哈希值包装起来,如果模完得到的结果在数组中已存在节点,便将包装后的结果用链表的方式串联在原本节点之后,如果没有便直接放在数组的对应位置,这样便得到了一个哈希表。在delete时,由于需要维护这个连续性,会麻烦一点,在删除操作中,我们需要将map1中最后一个字段对应的下标先修改为和要删除的字段对应的下标一致,之后删除map1的最后一个要删除的数。不管输入数据的长度如何,哈希函数产生的输出长度是固定的。
2025-01-15 22:17:39
1151
原创 左神算法基础巩固--5
在构建完这棵树后,树上的每个节点都代表着一些前缀信息,如:上图中的根节点下a分支下的节点,该节点的pass代表着以a为前缀的字符串的个数,其end代表着字符a的个数;在删除前缀树中的某个字符串中时,首先需要判断树中是否存在,在确定存在后将字符串分割为字符,后根据字符找到字符所对应的各个节点,将每个节点的pass值均减一并判断当存在某个节点的pass值为0时将其下一个节点设为null,如果没有便在最后的节点的位置将end–当字符串的所有节点都正确的存在与树中时,便在最后指向的节点出end++
2025-01-08 21:47:38
953
原创 左神算法基础巩固--4
prim算法是一种用来生成最小生成树的算法,其具体流程为选定一个节点作为初始节点,遍历找到初始节点相邻的所有节点,选择边的权值最下的那条边,重复以上过程直到所有的节点都被链接。kruskal算法是一种用来生成最小生成树的算法,其具体的思路在于,遍历所有的边,找到未选择的一条权值最小的边,在保证其在加入这条边后不会产生环的情况下,加入一个集合。点集中的点主要包含点的值,点的入度,点的出度,点所指向的其他的点,点所指向的其他的点的边的信息。边集上的边则包括边的初始点,边的终止点,边的权值。
2025-01-08 11:25:13
326
原创 左神算法基础巩固--3
我们先创建一个HashMap用来存储每个节点在哪一层,同时在进行宽度优先遍历的时候,每遍历到一个节点就判断他与当前的层数是否相等相等便更新当前的层数的节点数,如果不相等便将树的最大节点数与当前层数的节点数相比较如果大于树的层的最大节点数便更新树的层的最大节点数。故这道题的解题思路为,我们先得到当前节点的左子树的信息和右子树的信息,然后,我们根据这些信息得到我们需要返回的以当前节点为头节点的子树的高度,之后我们再根据左右子树的信息得到以当前节点为头节点的子树的节点树,最后拼接成自己需要返回的信息返回。
2025-01-07 12:21:09
820
原创 左神算法基础巩固--2
这种情况的判定方法,第一种情况类似我们先用快慢指针知道是否有环后,遍历这两个链表,并记录下每个链表的最后的节点和这两个链表的长度,并作差值n,当这两个链表相交但无环时,这两个链表所对应的最后的节点是相同的,同时记录下较长的链表让用指针指向其头部并先走n步,之后用指针指向另一链表的头部,两者同时走,两指针相等时便是两指针的相交节点。在这种情况下,我们先用快慢指针知道是否有环后,遍历这两个链表,并记录下每个链表的最后的节点和这个数组的长度,当这两个链表不相交且无环时,这两个链表所对应的最后的节点是不同的。
2025-01-05 22:53:00
774
原创 左神算法基础巩固--1
时间复杂度为一个算法流程中,常数操作数量的一个指标。常用O(读作big O)来表示。具体来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作,进而总结出常数操作数量的表达式。在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果为f(N),那么时间复杂度为O(f(N))。
2024-12-22 16:47:20
1039
原创 java虚拟机基础学习--黑马程序员--4
优点:吞吐量高:复制算法只需要遍历一次存活对象复制到To空间即可,比标记-整理算法少了一次遍历的过程,因而性能较好,但是不如标记-清除算法,因为标记清除算法不需要进行对象的移动。通过垃圾回收器来对不再使用的对象完成自动的回收,垃圾回收器主要负责对堆上的内存进行回收。堆对于对象的回收与方法区的类似:Java中的对象是否能被回收,是根据对象是否被引用来决定的。当老年代中空间不足,无法放入新的对象时,先尝试minor gc如果还是不足,就会触发Full GC,Full GC会对整个堆进行垃圾回收。
2024-11-21 18:06:13
769
原创 java虚拟机基础学习笔记--黑马程序员--3
如果不设置任何的虚拟机参数,max默认是系统内存的1/4,total默认是系统内存的1/64。在实际应用中一般都需要设置total和max的值。
2024-11-21 09:30:00
1966
原创 java虚拟机基础学习笔记--黑马程序员--2
1.类加载器的作用是什么?类加载器(ClassLoader)负责在类加载过程中的字节码获取并加载到内存这一部分。通过加载字节码数据放入内存转换成byte[],接下来调用虚拟机底层方法将byte[]转换成方法区和堆中的数据。2.有几种类加载器?1.启动类加载器(Bootstrap ClassLoader)加载核心类2.扩展类加载器(Extension ClassLoader)加载扩展类。
2024-11-20 19:42:06
911
原创 jvm虚拟机基础学习笔记--黑马程序员--1
类的生命周期可以分为:加载、链接、初始化、使用和卸载这五个阶段几个要点:1.静态变量的定义使用final关键字,这类变量会在准备阶段直接进行初始化(除非要执行方法)。2.直接访问父类的静态变量,不会触发子类的初始化。子类的初始化cinit调用之前,会先调用父类的cinit初始化方法。添加-XX:+TraceClassLoading 参数可以打印出加载并初始化的类。
2024-11-20 16:38:42
1453
原创 前端开发笔记-- 黑马程序员4
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录css 三角写法用户界面鼠标样式取消表单轮廓vertical-align文本溢出html5 新标签多媒体标签视频标签音频标签多媒体标签总结input表单属性选择器结构伪类选择器css 三角写法用户界面鼠标样式取消表单轮廓vertical-align
2024-10-11 23:41:54
398
原创 前端学习笔记 --css 黑马程序员3
文章目录盒子模型盒子的边框边框的复合写法表格的细线边框边框的注意事项paddingpadding的复合属性padding的注意事项marginmargin 让块元素、行内元素、行内块元素实现水平居中margin 外边距合并相邻块元素垂直外边距合并嵌套块元素垂直外边距合并圆角边框圆角边框的使用盒子边框文字阴影浮动浮动的原理与语法浮动的特性--脱标浮动特性--浮动元素一行显示浮动特征--浮动元素具有行内块元素的特性浮动的使用注意事项清除浮动清除浮动的方法清除浮动总结定位相对定位绝对定位固定定位粘性定位定位分类总
2024-10-11 14:07:15
745
原创 前端开发笔记-css 黑马程序员2
文章目录emmet语法emmet 语法生成html标签emmet 语法生成css复合选择器后代选择器子选择器并集选择器链接伪类选择器复合选择器总结元素显示模式块元素行内元素行内块元素元素显示模式总结背景背景颜色背景图片背景平铺背景位置背景图片固定背景颜色复合写法背景颜色半透明背景总结css的三大特性层叠性继承性行高的继承性优先级emmet语法emmet 语法生成html标签emmet 语法生成css复合选择器后代选择器子选择器并集选择器链接伪类选择器复合选择器总结元素
2024-10-09 22:07:13
435
原创 前端开发笔记--css 黑马程序员1
文章目录1. css 语法规范2.css的书写风格3.选择器选择器的分类标签选择器类选择器类选择器的特殊使用--多类名id 选择器字体属性常见字体字体大小字体粗细字体倾斜字体的复合简写字体属性总结文本属性文本颜色文本对齐装饰文本文本缩进文本间距文本属性总结css的引入方式内部样式表行内样式表外部样式表css引入方式总结1. css 语法规范2.css的书写风格3.选择器选择器的分类标签选择器类选择器类选择器的特殊使用–多类名id 选择器字体属性常见字体字体大
2024-10-09 12:45:53
762
原创 前端开发笔记--html 黑马程序员1
VsCode在刚下载完成后默认是英文的,这对我们这些中国程序员来说很不友好,为了解决这个问题我们可以选择在VsCode中安装一个这个插件,在安装并重启VsCode后VsCode便会将语言调整为中文。这个插件能够让我们实时看到我们修改后的代码的效果,而不需要在每次修改后都刷新浏览器。这个插件能够帮助我们进行快捷的修改标签在我们修改前一个·标签,后一个标签也会改动。由于篇幅的原因在这里便简单介绍一下一些比较重要的插件,黑马那边有更加全面的插件。这个插件能够让我们选择想要的浏览器进行预览。1.前端开发框架代码。
2024-10-08 13:23:16
1753
原创 二分算法题:洛谷1873
此题关键在于能否确定此题使用二分的方法求解(在遇到需要得到最大的最小或最小的最大之类的题目便可以考虑使用二分的方法求解),在确定使用二分的情况下,确定二分的范围即二分的最大值与最小值,在本题中最小值显而易见固定为-1或0,但最大值为树木的最大高度需要动态求取,之后便是通过编写检验函数进行正常二分了。对 Mirko 来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍伐森林。例如,如果一排树的高度分别为。在本题中二分的最大值为树的最大高度,最小值则为-1。米的高度,切割后树木剩下的高度将是。
2024-10-07 23:55:44
1358
原创 数据结构--循环双端队列的创建
循环双端队列(Circular Deque)是一种数据结构,结合了队列(Queue)和双端队列(Deque)的特性。它允许从两端添加和移除元素,具备了队列和栈的功能,但是在操作上更为灵活和高效。在创建循环双端队列之前,我们需要考虑几个关键的设计和实现细节:1.数据结构的选择:循环双端队列通常基于数组(Array)或者链表(Linked List)实现。数组实现简单且内存连续,方便随机访问,但需要处理扩容和缩容的问题;链表实现则动态管理内存,插入删除操作更为灵活,但可能存在额外的空间开销和指针操作。
2024-07-12 09:00:00
1621
原创 力扣编程题--38.外观数组 难度中等
行程长度编码(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。例如,要压缩字符串 “3322251” ,我们将 “33” 用 “23” 替换,将 “222” 用 “32” 替换,将 “5” 用 “15” 替换并将 “1” 用 “11” 替换。3.循环遍历:循环遍历前一个外观数组,将外观数组中每一个数字和个数并将其加入到StringBuilder中。此题关键在于得到下一个外观数组,需根据前一个外观数组和规则得到。
2024-07-11 21:06:19
1213
原创 数据结构 ----栈和队列的相互实现
栈(Stack)和队列(Queue)是两种常见的数据结构,它们在程序设计和算法中有着广泛的应用。栈和队列都是特定顺序的数据集合,但它们的操作方式和特性略有不同,因此在某些情况下,需要相互实现的能力。有时候在解决问题时,需要将栈转换为队列或者队列转换为栈,以满足特定的操作顺序需求。例如,在某些算法中需要使用栈来辅助实现队列的功能,或者使用队列来实现栈的功能。这种转换可以通过两种数据结构的基本操作来实现,是算法设计中的常见技巧之一。
2024-06-24 00:52:44
845
原创 java算法 队列、栈、循环队列实现
在计算机科学中,队列(Queue)和栈(Stack)是常见的数据结构,它们被广泛应用于算法和程序设计中。队列和栈都是一种线性数据结构,其中元素按照特定的顺序存储和访问。队列是一种先进先出(First-In-First-Out,FIFO)的数据结构,类似于现实生活中排队的场景。元素从队列的一端(称为队尾)进入,从另一端(称为队头)出去。在队列中,最先进入的元素首先被访问和处理。栈是一种后进先出(Last-In-First-Out,LIFO)的数据结构,类似于现实生活中的堆叠。
2024-06-14 00:25:03
1503
原创 链表入门--划分链表
划分两链表是一种常见的链表操作,通常涉及将链表中的元素根据某个条件分成两个独立的链表。这个过程可以帮助我们在链表中筛选出符合特定条件的元素,然后将它们重新组织成两个新的链表。在进行划分两链表之前,我们首先需要明确划分的条件。这通常是一个谓词函数,根据某种条件对链表中的元素进行判断。例如,我们可能希望将链表中的奇数节点和偶数节点分别放入两个不同的链表,或者根据节点值的大小将链表分成两部分。一旦确定了划分的条件,我们就可以遍历原始链表,并根据条件将节点添加到相应的链表中。
2024-06-07 00:00:30
685
原创 链表入门--两链表相加
当我们谈到两个链表相加时,实际上是指将两个已经按逆序排列的链表合并成一个新的逆序排列的链表。这是一个常见的链表问题,解决它可以让我们熟悉链表的基本操作,并且了解如何在算法中处理有序数据。两个链表相加的过程涉及到对两个链表对应节点值相加和节点的移动操作。具体来说,我们首先需要创建了一个虚拟头节点(dummyHead),这样可以简化在处理边界情况时对头节点的特殊处理。然后使用一个cur指针来构建新的链表,同时使用carry变量来保存进位的值。
2024-05-31 01:06:50
521
原创 力扣编程题--22括号生成 难度中等
本题主要考察回溯以及括号生成规则,难度并不是很大,但需要对括号的注意事项有一定了解以及能够想到用算法进行检查,排除不符合规则的情况或在生成情况时便加以限制。
2024-05-30 22:07:45
425
原创 力扣编程题--11.盛最多水的容器 难度中等
这道题对初学者来说算是比较简单的,不至于让初学者出现无从下手的情况,要达到完美的过完全部数据的关键便是要把握住矩形区域的长是由两条垂线中值较小的那条所决定的,明白了这点,这道题便十分容易了。
2024-05-22 23:15:59
309
1
原创 链表入门- - 合并两个有序链表
当我们谈到合并两个有序链表时,实际上是指将两个已经按升序排列的链表合并成一个新的按升序排列的链表。这是一个常见的链表问题,解决它可以让我们熟悉链表的基本操作,并且了解如何在算法中处理有序数据。合并两个有序链表的过程涉及到对两个链表节点值的比较和节点的移动操作。具体来说,我们需要比较两个链表当前节点的值,然后选择其中较小的值作为新链表的下一个节点,并将指针移动到下一个节点,直到其中一个链表遍历完毕。最后,将剩余链表的所有节点直接接到新链表的末尾即可。
2024-05-14 00:26:07
1322
1
原创 二分查找的应用:查找数组中的某个数下标、查找数组中大于等于某个数的最小下标、查找数组中的峰值
二分查找(Binary Search)在计算机科学中非常重要,因为它是一种高效的搜索算法。它的时间复杂度为O(log n),其中n是要搜索的元素数量。这意味着随着元素数量的增加,二分查找的性能增长速度非常慢,因此即使在大型数据集中,它也能快速找到目标元素。这种效率使得二分查找广泛应用于各种算法和数据结构中,例如在排序算法、查找算法和图算法中。
2024-05-03 00:37:15
694
原创 java算法入门 选择、冒泡、插入排序(三傻排序)
这篇博客是本人自我学习使用作为自我学习的知识总结 ,如有什么写的不对的地方,也欢迎各位以前讨论。上述便是三傻排序的实现思路和实现代码,其中自我感觉插入排序代码最简单也最为实用。
2024-04-24 23:54:29
340
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅