自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法通关村—两数之和问题解析

【代码】算法通关村—两数之和问题解析。

2023-08-24 14:06:04 42 1

原创 算法通关村—如何实现一个队列

队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,即我们常说的FIFO(first in first out)先进先出。队列实现方式也有两种形式,基于数组和基于链表。对于基于链表,因为链表的长度是随时都可以变的,实现起来比较简单,本文就以基于链表为例。

2023-08-03 15:27:59 32

原创 算法通关村—最小栈问题解析

对于栈来说,如果一个元素 a 在入栈时,栈里有其它的元素 b, c, d,那么无论这个栈在之后经历了什么操作,只要 a 在栈中,b, c, d 就一定在栈中,因为在 a 被弹出之前,b, c, d 不会被弹出。题目要求在常数时间内获得栈中的最小值,因此不能在 getMin() 的时候再去计算最小值,最好应该在 push 或者 pop 的时候就已经计算好了当前栈中的最小值。因此,在操作过程中的任意一个时刻,只要栈顶的元素是 a,那么我们就可以确定栈里面现在的元素一定是 a, b, c, d。

2023-08-03 14:59:36 33

原创 算法通关村—如何基于数组实现栈(与JDK源码对比)

栈底层实现仍然是链表或者顺序表,栈与线性表的最大区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进行。一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。ensureCapacityHelper就是保障Stack的容量的一个方法,实现自动扩容,基本就是具体扩容规则的一些实现,不再深究。但是,这个简单的例子中可以看出来,这个栈的容量是固定不变的,假如有11个元素呢?

2023-07-31 15:39:28 53 1

原创 算法通关村——双指针的妙用

slow之前的位置都是有效部分,fast表示当前要访问的元素。整体思想就是定义两个指针slow和fast,初始值都是0。

2023-07-27 13:53:58 36 1

原创 算法通关村——不简单的数组增删改查

将给定的元素插入到有序数组的对应位置中,我们可以先找位置,再将其后元素整体右移,最后插入到空位置上。该问题貌似一个for循环就搞定了,但是如果面试直接让你写并能正确运行,我相信很多人还是会折腾很久,甚至直接会挂。增加和删除元素是数组最基本的操作,看别人的代码非常容易,但是自己写的时候经常bug满天飞。所以务必自己亲手能写一个才可以,不要感觉挺简单就不写,其中涉及的问题在所有与数组有关的算法题中都会遇到。对于删除,不能一边从后向前移动一边查找了,因为元素可能不存在。面试冒汗时别怪没提醒!

2023-07-25 20:54:04 16

原创 算法通关村第二关——链表指定区间反转问题解析

这个过程就是前面的带虚拟结点的插入操作,每走一步都要考虑各种指针怎么指,既要将结点摘下来接到对应的位置上,还要保证后续结点能够找到。反转的整体思想是,在需要反转的区间里,每遍历到一个节点,让这个新节点来到反转部分的起始位置。下面的图展示了整个流程。我们可以将该链表分为三个部分,反转前区间,反转区间,反转后区间,记录下这三个区间,最后拼合即可。

2023-07-24 16:12:40 16

原创 算法通关村第二关——终于学会链表反转了

在分析链表插入元素的时候,会发现如何处理头结点是个比较麻烦的问题,为此可以先建立一个虚拟的结点dummy,并且令dummy.next=head,这样可以很好的简化我们的操作。如果我们将链表{1->2->3->4->5}进行反转,我们首先建立虚拟结点dummy,并令dummy.next=node(1),接下来我们每次从旧的链表拆下来一个结点接到dummy后面,遍历完全,链表也就反转了。我们可以在遍历链表的同时,一直采用头插法,将节点插入在头部,在遍历完成后,也就实现了链表反转。方式2:直接操作链表实现反转。

2023-07-22 17:16:50 30

原创 编程导航算法通关村第 1 关 | 链表经典问题之双指针专题笔记

这里也可以使用快慢双指针,我们先将fast 向后遍历到第 k+1 个节点, slow仍然指向链表的第一个节点,此时指针fast 与slow 二者之间刚好间隔 k 个节点。假设我们有两个指针,A与B分别指向实例1中的①这个节点,但是A指针每次只向前走一个位置,第一次到达②,而B指针每次走两个位置,第一次到达③。接着往前走,A到达③,B到达⑤,而B前面已经没有路可以走了,就意味着到达顶点,这时候A指针指向的就是该链表的中点。这就是双指针的应用,实际上就是赋予两个指针不同得到运行轨迹,从而得到结果。

2023-07-17 21:48:31 510 1

原创 编程导航算法通关村第 1 关 | 青铜学习

链表是一种最基本的结构,普通的单链表就是只给你一个指向链表头的指针head,如果想访问其他元素,就只能从head开始一个个向后找,最终会在访问尾结点之后结束,尾节点继续访问下一个节点会返回null,以此判断链表是否结束。在工程应用,极少见到普通单链表,比较多的是带头结点的单链表和双向循环链表。有时候会将多个链表组合从而实现更丰富的功能,这种操作在很多底层软件里大量使用,例如操作系统、虚拟机等。

2023-07-16 15:20:35 205 2

空空如也

空空如也

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

TA关注的人

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