![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法Study
算法之路,漫漫远兮!
小黄妖怪
这个作者很懒,什么都没留下…
展开
-
图遍历算法模板
深度优先遍历用递归+记忆化网格结构的 DFS 与二叉树的 DFS 最大的不同之处在于,遍历中可能遇到遍历过的结点。这是因为,网格结构本质上是一个「图」,我们可以把每个格子看成图中的结点,每个结点有向上下左右的四条边。在图中遍历时,自然可能遇到重复遍历结点。这时候,DFS 可能会不停地「兜圈子」,永远停不下来,如下图所示:如何避免这样的重复遍历呢?答案是标记已经遍历过的格子。以岛屿问题为例,我们需要在所有值为 1 的陆地格子上做 DFS 遍历。原创 2024-08-14 11:04:54 · 360 阅读 · 0 评论 -
LeetCode 61. 旋转链表
其实像例1中,链表长度length为5,当k为5,10,15时,链表其实是没有变化的,当k为6,11,16时也只是相当于旋转了一次,所以旋转得次数其实是k%length。解题思路:本题中比较简单想法就是使用递归做法,每做一次递归使得k-1,将尾节点接到首节点左边,但是这样做当K特别大时会出现栈溢出的情况。输入:head = [1,2,3,4,5], k = 2。输入:head = [0,1,2], k = 4。链表中节点的数目在范围 [0, 500] 内。输出:[4,5,1,2,3]输出:[2,0,1]原创 2024-03-25 21:54:55 · 217 阅读 · 0 评论 -
LeetCode215. 数组中的第K个最大元素
为了保证稳定性,随机获取集合中的一个元素pivot进行排序,所以我们可以判断比该pivot元素小的元素个数(low.size()),比该pivot元素大的元素个数(above.size()),以及和该pivot元素相等的元素个数(equal.size())请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入: [3,2,3,1,2,4,5,5,6], k = 4。输入: [3,2,1,5,6,4], k = 2。此时我们所知道的是要查找第K大的元素。原创 2024-03-25 20:37:32 · 331 阅读 · 0 评论 -
LeetCode162. 寻找峰值
这是因为nums[mid-1]>nums[mid],同时左边界为无穷小。此时在nums[0]~nums[mid]中必有峰值元素。就和现实中爬山一样,在nums[mid]端向左爬,是上山,但最终会下到山底,所以必然会有一个山峰。如果nums[mid-1]>nums[mid]那么在左半端必有峰值元素,右半端同理。你可以假设 nums[-1] = nums[n] = -∞。输入:nums = [1,2,1,3,5,6,4]解释:你的函数可以返回索引 1,其峰值元素为 2;输入:nums = [1,2,3,1]原创 2024-03-23 20:31:02 · 307 阅读 · 0 评论 -
LeetCode148. 排序链表
解决思路:遍历链表中的节点,将其中的值存入list中,然后对list进行排序,重新建立一个链表即可。给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。时间复杂度为O(n),空间复杂度为O(n),其中n为节点个数。链表中节点的数目在范围 [0, 5 * 104] 内。输入:head = [-1,5,3,4,0]输入:head = [4,2,1,3]输出:[-1,0,3,4,5]输出:[1,2,3,4]输入:head = []原创 2024-03-22 21:14:55 · 171 阅读 · 0 评论 -
LeetCode103. 二叉树的锯齿形层序遍历
(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。使用两个栈来实现功能,一个全局栈global,一个局部栈temp,此外设置一个标志位label来判断在每一层时保存孩子的顺序。当每一层遍历完毕之后,将局部栈克隆给全局栈,此时全局栈具有下一层的节点。使用全局栈来进行遍历输出节点,在输出的同时将左右孩子节点存入局部栈中。输入:root = [3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]输入:root = [1]输入:root = []原创 2024-03-22 20:53:01 · 291 阅读 · 0 评论 -
红黑树简单介绍
红黑树是一种自平衡二叉查找树,由于自平衡的特性,保证了最坏情况下在O(logn)时间复杂度内完成查找、增加、删除等操作,性能表现稳定。在JDK中,TreeMap、TreeSet以及JDK1.8的HashMap底层都采用了红黑树。原创 2024-03-20 10:10:56 · 369 阅读 · 0 评论 -
二叉树之遍历代码模板
【代码】二叉树之遍历代码模板。原创 2024-03-19 21:30:59 · 177 阅读 · 0 评论 -
LeetCode5 最长回文子串
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。给你一个字符串 s,找到 s 中最长的回文子串。解释:“aba” 同样是符合题意的答案。输入:s = “babad”输入:s = “cbbd”原创 2024-02-25 16:01:56 · 128 阅读 · 0 评论