银河骑士每日一练
Zachos
这个作者很懒,什么都没留下…
展开
-
72.编辑距离
【代码】72.编辑距离。原创 2024-04-29 11:51:08 · 79 阅读 · 0 评论 -
【无标题】
如果最后一步爬了 1 个台阶,那么我们得先爬到 i−1,要解决的问题缩小成:从 0 爬到 i−1有多少种不同的方法。如果最后一步爬了 2 个台阶,那么我们得先爬到 i−2,要解决的问题缩小成:从 0 爬到 i−2有多少种不同的方法。因为要解决的问题都是「从 0 爬到 i」,所以定义 dfs(i)表示从 0 爬到 i有多少种不同的方法。因为要解决的问题都是「从 0 爬到 i」,所以定义 dfs(i) 表示从 0爬到 i有多少种不同的方法。递归怎么写:状态定义与状态转移方程。原创 2024-04-29 10:16:22 · 119 阅读 · 0 评论 -
215.数组中的第k个最大元素
题解手写版原创 2024-04-23 18:29:51 · 77 阅读 · 0 评论 -
4.寻找两个正序数组的中位数
直接看方法四 时间复杂度可以原创 2024-04-22 13:38:02 · 245 阅读 · 0 评论 -
34.在排序数组中查找元素的第一个和最后一个位置
添加链接描述原创 2024-04-21 14:42:54 · 76 阅读 · 0 评论 -
74.搜索二维矩阵
题解原创 2024-04-21 14:03:27 · 92 阅读 · 0 评论 -
17.电话号码
题解原创 2024-04-20 01:19:41 · 249 阅读 · 0 评论 -
78.子集
题解原创 2024-04-20 01:09:29 · 392 阅读 · 0 评论 -
46.全排列
题解原创 2024-04-20 00:52:55 · 74 阅读 · 0 评论 -
200.trie前缀树
Trie树常用于自动补全,拼写检查,单词搜索,高频统计等领域,一般都是这个模板再加个次数。原创 2024-04-20 00:05:39 · 136 阅读 · 0 评论 -
200.岛屿问题
岛屿问题dfs通用解法原创 2024-04-19 10:34:23 · 94 阅读 · 0 评论 -
LeetCode138题:随机链表的复制(python3)
最后,我们然后map.get(head),也就是对应的新链表的头节点,就可以解决此问题了。map.get(原节点.random),得到的就是对应的新节点.random。map.get(原节点.next),得到的就是对应的新节点.next。新节点.random -> map.get(原节点.random)从上图中我们可以发现,原节点和新节点是一一对应的关系,所以。新节点.next -> map.get(原节点.next)map.get(原节点),得到的就是对应的新节点。原创 2024-04-17 16:07:30 · 184 阅读 · 0 评论 -
LeetCode25题:k个一组翻转链表(python3)
k个一组翻转链表题解原创 2024-04-17 11:04:24 · 182 阅读 · 0 评论 -
LeetCode1题:两数之和(python3)
使用哈希表字典来查找,效率非常高。原创 2024-04-14 09:22:37 · 507 阅读 · 0 评论 -
LeetCode124题:二叉树的最大路径和(python3)
左子树找到最大的,右子树也一样,有的节点可能是负数,所以一开始ans = -inf。原创 2024-04-13 22:39:19 · 105 阅读 · 0 评论 -
LeetCode236题:二叉树的最近公共祖先(python3)
如果当前节点是空节点,以及当前节点是p或者是q,返回当前节点。如果左右子树都找到:返回当前节点。只有左子树:返回递归左子树的结果。只有右子树:返回递归右子树的结果。都没找到:返回空节点。原创 2024-04-13 21:26:12 · 91 阅读 · 0 评论 -
LeetCode437题:路径总和III(python3)
整条路径和减去target和,如果存在这样的一个前缀节点,那count+1,遍历满足等式的,就可以加count。原创 2024-04-13 21:14:27 · 372 阅读 · 0 评论 -
LeetCode105题:从前序与中序遍历构造二叉树(python3)
时间复杂度:n的平方,其中 n 为 preorder的长度。最坏情况下二叉树是一条链,我们需要递归 O(n)次,每次都需要 O(n)的时间查找 preorder[0]和复制数组。空间复杂度:n的平方。速度快了很多41ms。原创 2024-04-13 10:13:53 · 137 阅读 · 0 评论 -
LeetCode114题:二叉树展开为链表(python3)
【代码】LeetCode114题:二叉树展开为链表(python3)原创 2024-03-15 16:35:42 · 105 阅读 · 0 评论 -
LeetCode199题:二叉树的右视图(python3)
代码思路:深度优先搜索,每次总访问右子树,value_depth用dict存放,深度为索引,存放节点的值,stack从根节点[(root, 0)]开始,添加node和depth。原创 2024-03-15 11:52:52 · 281 阅读 · 0 评论 -
LeetCode230题:二叉搜索树中第K小的元素(python3)
代码思路:二叉搜索树中序遍历为递增序列。原创 2024-03-14 18:18:26 · 241 阅读 · 0 评论 -
LeetCode98题:验证二叉搜索树(python3)
当前节点的值是其左子树的值的上界(最大值)当前节点的值是其右子树的值的下界(最小值)节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。原创 2024-03-13 16:20:14 · 275 阅读 · 0 评论 -
LeetCode108题:将有序数组转换为二叉搜索树(python3)
一个容易想到的思路:使用 nums 中最靠近中心的位置作为整棵 BST 的根节点,确保左右子树节点数量平衡。随后递归构造 nums 中下标范围为 [0,mid−1]作为左子树,递归构造 nums 中下标范围为 [mid+1,n−1]作为右子树。原创 2024-03-12 18:51:30 · 532 阅读 · 0 评论 -
LeetCode101题:对称二叉树(python3)
对称二叉树,在相同二叉树基础上原创 2024-03-12 16:03:57 · 197 阅读 · 0 评论 -
LeetCode102题:二叉树的层序遍历(python3)
代码思路:使用队列先进先出的特性,queue[]不为空进入for循环,tmp存储每层的节点,将结果添加至res[]中。python中使用collections中的双端队列deque(),其popleft()方法可达到O(1)时间复杂度。原创 2024-03-12 16:01:59 · 436 阅读 · 0 评论 -
LeetCode543题:二叉树的直径(python3)
二叉树的直径原创 2024-03-12 14:57:25 · 356 阅读 · 0 评论 -
LeetCode226题:翻转二叉树(python3)
二叉树原创 2024-03-12 01:23:28 · 236 阅读 · 0 评论 -
LeetCode104题:二叉树的最大深度(python3)
max(l,r)+1,而左子树和右子树的最大深度又可以以同样的方式进行计算。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1)时间内计算出当前二叉树的最大深度。递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度。一次递归调用的时间复杂度为 O(1),有 n 个结点,要进行 n 次递归调用(每个结点遍历一次),所以总的时间复杂度为 O(n) .如果我们知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为。原创 2024-03-12 01:06:39 · 161 阅读 · 0 评论 -
LeetCode94题:二叉树的中序遍历(python3)
换句话说,我们在遍历cur_node的时候,不能立刻对cur_node进行访问,而应该先对cur_node.left进行遍历之后(如果是后序遍历,还得是在对cur_node.right进行访问之后),才能对cur_node进行访问。在递归写法中,由于cur_node.left的遍历是通过递归调用来执行的,在关于cur_node.left的递归调用结束后,会自然地回到当前关于cur_node的遍历中,其下一行要执行的内容自然就是visit(cur_node)。时间复杂度 O(n),空间复杂度 O(n)。原创 2024-03-12 00:42:30 · 618 阅读 · 0 评论 -
LeetCode146题:LRU缓存(python3)
就不会创建字典,而是改用指针偏移量直接拿到属性对象。所以即节省了内存(没有字典)又节省了时间(省去查字典的过程)。Python 默认是用 dict 存储属性的,每次用 . 访问属性都需要查字典。原创 2024-03-09 00:27:54 · 635 阅读 · 0 评论 -
【无标题】
用最小堆初始把所有链表的头节点入堆,然后不断弹出堆中最小节点x,如果x.next不为空就加入堆中,循环直到堆为空,把弹出的节点按顺序拼接起来,就得到答案。原创 2024-03-08 23:40:08 · 110 阅读 · 0 评论 -
LeetCode148题:排序链表(python3)
使用快慢指针 fast = head.next、slow = head,让 fast 每次移动 2 步,slow 移动 1 步,移动到链表末尾,从而找到链表中心链节点,即 slow。而链表用在存储完全二叉树的时候,因为不支持随机访问的特性,导致其寻找子节点和父亲节点会比较耗时,如果增加指向父亲节点的变量,又会浪费大量存储空间。而对于链表排序而言,因为链表不支持随机访问,访问链表后面的节点只能依靠 next 指针从头部顺序遍历,所以相对于数组排序问题来说,链表排序问题会更加复杂一点。原创 2024-03-08 14:58:13 · 698 阅读 · 0 评论 -
LeetCode19题:删除链表的倒数第N个结点(python3)
我们可以设想假设设定了双指针 p 和 q 的话,当 q 指向末尾的 NULL,p 与 q 之间相隔的元素个数为 n 时,那么删除掉 p 的下一个指针就完成了要求。2.设定双指针 p 和 q,初始都指向虚拟节点 dummyHead。3.移动 q,直到 p 与 q 之间相隔的元素个数为 n。4.同时移动 p 与 q,直到 q 指向的为 NULL。1.设置虚拟节点 dummyHead 指向 head。5.将 p 的下一个节点指向下下个节点。原创 2024-03-08 01:25:59 · 266 阅读 · 0 评论 -
LeetCode2题:两数相加(python3)
代码思路:如果值大于10,那么就进位到下一个位置l1.next,然后再让l1+l2更新l2的值。原创 2024-03-07 14:57:26 · 156 阅读 · 0 评论 -
LeetCode142题:环形链表II(python3)
设链表共有 a+b个节点,其中 链表头部到链表入口 有 a 个节点(不计链表入口节点), 链表环 有 b 个节点(这里需要注意,a 和 b 是未知数,例如图解上链表 a=4 , b=5);(解析: fast 每轮走 2步)fast 比 slow 多走了 n 个环的长度,即 f=s+nb;当 fast 指针走到 f=a步时,slow 指针走到 s=a+nb步。因为每走 1轮,fast 与 slow 的间距 +1,fast 一定会追上 slow。令 fast 每轮走 2 步,slow 每轮走 1 步。原创 2024-03-06 20:30:46 · 420 阅读 · 0 评论 -
LeetCode141题:环形链表(python3)
然而面试的时候经常碰见诸如获取倒数第k个元素,获取中间位置的元素,判断链表是否存在环,判断环的长度等和长度与位置有关的问题。一般来讲,链表中只会有一个结点的指针域为空,该结点为尾结点,其他结点的指针域都会存储一个结点的内存地址。增加元素时需要移动指定位置及之后的所有元素,然后将新增元素插入到指定位置,如果容量不足的话还需要先进行扩容操作。数组,所有元素都连续的存储于一段内存中,且每个元素占用的内存大小相同。但连续存储的缺点也很明显,增加容量,增删元素的成本很高,时间复杂度均为 O(n)。原创 2024-03-06 15:11:41 · 330 阅读 · 0 评论 -
LeetCode234题:回文链表(python3)
代码思路:将链表的值复制到数组列表中,再使用双指针法判断,不断更新current_node的值。原创 2024-03-03 13:42:44 · 303 阅读 · 0 评论 -
LeetCode206题:反转链表(python3)
【代码】LeetCode206题:反转链表(python3)原创 2024-03-03 13:39:45 · 297 阅读 · 0 评论 -
LeetCode240题:搜索二维矩阵II(python3)
若 flag < target ,则 target 一定在 flag 所在 列的右方 ,即 flag 所在列可被消去,j++若 flag > target ,则 target 一定在 flag 所在行的上方 ,即 flag 所在行可被消去,i–当 matrix[i][j] > target 时,执行 i-- ,即消去第 i 行元素。当 matrix[i][j] < target 时,执行 j++ ,即消去第 j 列元素。当 matrix[i][j] = target 时,返回 true ,代表找到目标值。原创 2024-03-01 22:30:06 · 279 阅读 · 0 评论 -
LeetCode48题:旋转图像/矩阵(python3)
将各元素依次写入到旋转后的索引位置,在写入一个元素 matrix[i][j]→matrix[j][n−1−i]后,原矩阵元素 matrix[j][n−1−i]就会被覆盖(即丢失),而此丢失的元素就无法被写入到旋转后的索引位置了,所以引入一个tmp暂存。「第 i 行」元素旋转到「第 n−1−i 列」元素;「第 j 列」元素旋转到「第 j 行」元素;原创 2024-03-01 21:43:28 · 228 阅读 · 0 评论