自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 链表相交相关

题目如上图所示,需要找到两个链表相交的结点(8结点)并返回;首先定义两个指针cura和curb指向两个链表的头结点,然后持续后移,直至其中某个为NULL。循环结束后,指针指向如下所示。循环结束以后,如果cura为NULL则代表B链表长度更长一些(也有可能A和B一样长,不过不影响,也将其看成B更长就行),反之则代表A链表长度更长一些(如本题所示)。然后根据长度较长链表的指针求得两个链表的长度差;如本题所示,继续让cura移动,直至为NULL,本题中移动了一次,即长度差为1。

2023-07-26 12:03:47 31 1

原创 删除链表的倒数第N个

note:注意不能直接让slow的next指向fast,因为如果要删除的元素是最后一个元素,就会出问题。slow指向要删除结点的前驱结点(3结点)。然后将slow的next指向slow->next->next(5结点),再将4结点delete掉即可完成删除。n=2,即将fast移动两次,此时fast指向2结点。然后开始进行循环,直至fast指向最后一个结点(5结点),同时移动slow结点。本题的关键就是采用快慢指针之间的距离n来找到需要删除的结点。同样采用虚拟头结点的方法(方便对于头结点的处理)。

2023-07-26 11:32:52 27 1

原创 两两交换链表中的结点

两两交换如上图所示,采用虚拟头结点的方法进行正常模拟交换即可。(这样就可以不考虑头结点的问题了)当虚拟头结点后的两个结点均不为NULL时,则可以进行交换(两个结点才可以交换)。一开始cur指向虚拟头结点,当后两个结点均不为NULL时,进行交换,如图所示,采用两个temp保存结点辅助交换,当5步交换完成后;cur更新至1结点处,也就是下一次要交换的两个结点中第一个结点的前驱节点。然后若条件满足,则继续进行交换,直至循环结束,完成交换。最后返回的头结点为虚拟头结点的指针域所指的结点。

2023-07-25 20:14:39 30

原创 反转链表相关

对上述链表进行反转后为:反转过程即改变各个结点指针域(next)的指向。

2023-07-25 19:43:37 23

原创 链表设计(相关操作的实现)

在实现过程时,addAtIndex函数中重复_size++了,导致了越界错误。采用虚拟头结点的方法进行链表的设计(很多相关操作可以简化的实现)力扣题目707:设计链表。

2023-07-25 17:45:42 21

原创 链表的虚拟头结点

在链表的相关操作中,虚拟头结点的方法是很常用的。采用虚拟头结点可以简化很多的操作。

2023-07-25 17:33:29 214

原创 循环过程模拟锻炼

该题目无算法,主要是锻炼利用循环对于过程的模拟题目的关键如二分法时一样,主要是把握好一个循环不变量,就可以清晰的写出代码先写出几个例子,可以发现循环的转圈圈数为[n*n矩阵]n/2然后在循环体内对于过程进行模拟始终把握一个原则[每个for循环填入的元素区间为左闭右开],即循环不变量最后对于奇数n而言,循环结束后会有未填充的一个元素需要手动填充。

2023-06-26 11:12:50 25

原创 滑动窗口法习题练习

*题目要求寻找满足条件的子数组,所以可以采用滑动窗口法尝试解决*//*滑动窗口法的三个问题:1)滑动窗口的内容?:满足长度为k的子数组2)起始位置何时移动?当终止位置和起始位置之间的元素个数满足条件时,进行result的更新,并移动起始位置[同时移动终止位置,使得区间内的元素个数仍满足条件]3)终止位置何时移动?终止位置即为循环的索引,在循环体内进行更新可优化代码,不满足条件时只移动终止位置,满足条件时同时移动*/note:采用float时精度不够,需要采用double类型的变量。

2023-06-26 10:58:45 35

原创 滑动窗口法学习

滑动窗口法常用于寻找子数组的题目,其基本思想与双指针法类似。

2023-06-16 10:02:02 33 1

原创 双指针法进阶

题目所给的数组是有序的,所以即使平方后的数组其最大值出现的位置也只能是最左端或者最右端。也就是说平方后的数组也是有顺序的。所以我们可以每次比较两端元素的值大小,两端中较大的元素其实就是该数组中最大的元素。然后从中拿出较大的元素构成一个新的数组,也就是排序后的数组。基于这种思想,可以用双指针法来实现。两个指针分别指向数组的两端,找出较大元素后进行更新。

2023-06-09 11:15:36 36

原创 数组元素删除--快慢指针法学习

数组元素删除其实就是将不需要的元素用其他元素进行覆盖。并不存在真正的删除操作,因为元素存储的空间是连续的。

2023-06-08 22:52:07 76

原创 二分查找学习

而在上次循环中已经判断过了middle不是target,所以在下轮循环中不该再判断middle了,也就是下轮的搜素区间不应该再包含middle了;2)更新下标时,对于右端点更新,应为middle,因为middle一定不是target,但是循环条件中右端点为无效元素。左端点更新为middle+1。1)因为右端不是闭合区间,所以不包含右端点元素,所以left==right不是有效的。二分法中区间的定义一般有两种:一种是左闭右闭即[left,right],另外一种是左闭右开即[left,right)。

2023-06-08 16:56:53 21

空空如也

空空如也

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

TA关注的人

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