自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法通关村第五关[青铜挑战]-队列和Hash的特征

例如上面要继续存7,8,9的时候,7没问题,可以直接存到索引为0位置。同理9存到索引6位置。ThreadLocal有一个专门存储元素的TheadLocalMap,每次在get 和set元素的时候,会先将目标位置前后的空间搜索一下,将标记为nul的位置回收掉,这样大部分不用的位置就收回来了。HashMap的实现原理是先要找到要存放数组的下标,如果是空的就存进去,如果不是空的就判断key值是否一样,如果一样就替换,如果不一样就以链表的形式存在链表中(从JDK8开始,根据元素数量选择使用链表还是红黑树存储)。

2023-09-24 20:41:30 170 1

原创 算法通关村第四关[白银挑战]-栈的经典算法问题

对于 popMax(),由于我们知道当前栈中最大的元素值,因此可以直接将两个栈同时出栈,并存储第一个栈出栈的所有值。当某个时刻,第一人栈的出栈元素等于当前栈中最大的元素值时,就找到了最大的元素。对于栈来说,如果一个元素 a 在入栈时,栈里有其它的元素 b,c,d,那么无论这个栈在之后经历了什么操作,只要 a 在栈中,b,c,d 就一定在栈中,因为在 a 被弹出之前,b,c,d 不会被弹出。因此,在操作过程中的任意一个时刻,只要栈顶的元素是 a,那么就可以确定栈里面现在的元素一定是 a,b,c, d。

2023-09-21 23:07:24 193

原创 算法通关村第四关[青铜挑战]-理解栈手写栈

栈底层实现仍然是链表或者顺序表,栈与线性表的最大区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进行。一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。在设计栈的时候,不管用数组还是链表,都要实现上面几个方法如果想测试一下自己对栈是否理解,做一下这道题就够了:入栈顺序为1234,所有可能的出栈序列是什么?采用顺序表实现的的栈,内部以数组为基础,实现对元素的存取操作。

2023-09-20 23:28:46 178 1

原创 算法通关村第三关[青铜挑战]-双指针思想及应用

这个题使用双指针也可以非常方便的处理,慢指针指向每个区间的起始位置,快指针从慢指针位置开始向后遍历直到不满足连续递增(或快指针达到数组边界),则当前区间结束: 然后将 slow指向更新为 fast + 1,作为下一个区间的开始位置fast继续向后遍历找下一个区间的结束位置,如此循环,直到输入数组遍历完毕。对于第二种情况,首先想到的是从头到尾遍历整个字符串,遇到空格的时候就将其后面的元素向后移动2人位置,但是这样的问题在前面说过会导致后面的元素大量移动,时间复杂度为O(n^2),执行的时候非常容易超时。

2023-09-19 23:47:46 169

原创 算法通关村第三关[青铜挑战]-数组

例如序列是1 2 3 4 5 6 7 8 9,要删除5,则应先遍历,找到5,然后从5开始执行删除操作,也就是从6开始逐步覆盖上一个元素,最终将序列变成 1 2 3 4 6 7 8 9 [9]这个方法和增加元素一样,该方法同样要求删除序列最前、中间、最后和不存在的元素都能有效。而在链表型里,元素之间是通过地址依次连接的,因此访问时必须从头开始逐步向后找,因此查找效率低,而删除和增加元素非常方便,并目也不需要考虑扩容的问题。其次,数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存。

2023-09-12 20:54:20 151

原创 算法通关村第二关[白银挑战]-链表反转

两两交换链表中的节点之后,新的链表的头节点是 dummyHead.next,返回新的链表的头节点即可。方法二的缺点是: 如果left 和 right 的区域很大,恰好是链表的头节点和尾节点时,找到left 和 right需要遍历一次,反转它们之间的链表还需要遍历一次,虽然总的时间复杂度为 O(N),历了链表 2次,而方法一只需要遍历链表一次。链表回文串的时候,介绍的是基于栈的,相对来说比较好理解,但是除此之外还有可以使用链表反转来进行,而且还可以只反转一半链表,这种方式节省空间。

2023-09-08 00:19:48 223 1

原创 算法通关村第二关[青铜挑战]-链表反转

链表反转

2023-09-06 20:41:10 257 1

原创 算法通关村第一关[白银挑战]-链表

链表LeetCode刷题

2023-09-03 15:42:28 240

原创 算法通关村第一关[青铜挑战]-链表

链表(linked list)是一种在物理上非连续、非顺序的数据结构,由若干节点(node)所组成。链表的第1个节点被称为头节点,最后1个节点被称为尾节点,尾节点的next指针指向空。:单链表只指向一个结点,不能指向多个两个结点值相同,引用也相同的,不一定是同个结点。

2023-08-31 21:50:02 281

空空如也

空空如也

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

TA关注的人

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