自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 72.编辑距离

【代码】72.编辑距离。

2024-04-29 11:51:08 101

原创 【无标题】

如果最后一步爬了 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 141

原创 215.数组中的第k个最大元素

题解手写版

2024-04-23 18:29:51 103

原创 4.寻找两个正序数组的中位数

直接看方法四 时间复杂度可以

2024-04-22 13:38:02 252

原创 34.在排序数组中查找元素的第一个和最后一个位置

添加链接描述

2024-04-21 14:42:54 79

原创 74.搜索二维矩阵

题解

2024-04-21 14:03:27 96

原创 17.电话号码

题解

2024-04-20 01:19:41 257

原创 78.子集

题解

2024-04-20 01:09:29 395

原创 46.全排列

题解

2024-04-20 00:52:55 76

原创 200.trie前缀树

Trie树常用于自动补全,拼写检查,单词搜索,高频统计等领域,一般都是这个模板再加个次数。

2024-04-20 00:05:39 142

原创 994.腐烂的橘子

题解

2024-04-19 10:36:25 271

原创 200.岛屿问题

岛屿问题dfs通用解法

2024-04-19 10:34:23 97

原创 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 212

原创 LeetCode25题:k个一组翻转链表(python3)

k个一组翻转链表题解

2024-04-17 11:04:24 188

原创 LeetCode1题:两数之和(python3)

使用哈希表字典来查找,效率非常高。

2024-04-14 09:22:37 516

原创 LeetCode124题:二叉树的最大路径和(python3)

左子树找到最大的,右子树也一样,有的节点可能是负数,所以一开始ans = -inf。

2024-04-13 22:39:19 108

原创 LeetCode236题:二叉树的最近公共祖先(python3)

如果当前节点是空节点,以及当前节点是p或者是q,返回当前节点。如果左右子树都找到:返回当前节点。只有左子树:返回递归左子树的结果。只有右子树:返回递归右子树的结果。都没找到:返回空节点。

2024-04-13 21:26:12 103

原创 LeetCode437题:路径总和III(python3)

整条路径和减去target和,如果存在这样的一个前缀节点,那count+1,遍历满足等式的,就可以加count。

2024-04-13 21:14:27 389

原创 LeetCode105题:从前序与中序遍历构造二叉树(python3)

时间复杂度:n的平方,其中 n 为 preorder的长度。最坏情况下二叉树是一条链,我们需要递归 O(n)次,每次都需要 O(n)的时间查找 preorder[0]和复制数组。空间复杂度:n的平方。速度快了很多41ms。

2024-04-13 10:13:53 141

原创 LeetCode114题:二叉树展开为链表(python3)

【代码】LeetCode114题:二叉树展开为链表(python3)

2024-03-15 16:35:42 110

原创 LeetCode199题:二叉树的右视图(python3)

代码思路:深度优先搜索,每次总访问右子树,value_depth用dict存放,深度为索引,存放节点的值,stack从根节点[(root, 0)]开始,添加node和depth。

2024-03-15 11:52:52 292

原创 LeetCode230题:二叉搜索树中第K小的元素(python3)

代码思路:二叉搜索树中序遍历为递增序列。

2024-03-14 18:18:26 243

原创 LeetCode98题:验证二叉搜索树(python3)

当前节点的值是其左子树的值的上界(最大值)当前节点的值是其右子树的值的下界(最小值)节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。

2024-03-13 16:20:14 279

原创 LeetCode108题:将有序数组转换为二叉搜索树(python3)

一个容易想到的思路:使用 nums 中最靠近中心的位置作为整棵 BST 的根节点,确保左右子树节点数量平衡。随后递归构造 nums 中下标范围为 [0,mid−1]作为左子树,递归构造 nums 中下标范围为 [mid+1,n−1]作为右子树。

2024-03-12 18:51:30 534

原创 LeetCode101题:对称二叉树(python3)

对称二叉树,在相同二叉树基础上

2024-03-12 16:03:57 216

原创 LeetCode102题:二叉树的层序遍历(python3)

代码思路:使用队列先进先出的特性,queue[]不为空进入for循环,tmp存储每层的节点,将结果添加至res[]中。python中使用collections中的双端队列deque(),其popleft()方法可达到O(1)时间复杂度。

2024-03-12 16:01:59 447

原创 LeetCode543题:二叉树的直径(python3)

二叉树的直径

2024-03-12 14:57:25 363

原创 LeetCode226题:翻转二叉树(python3)

二叉树

2024-03-12 01:23:28 249

原创 LeetCode104题:二叉树的最大深度(python3)

max⁡(l,r)+1,而左子树和右子树的最大深度又可以以同样的方式进行计算。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1)时间内计算出当前二叉树的最大深度。递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度。一次递归调用的时间复杂度为 O(1),有 n 个结点,要进行 n 次递归调用(每个结点遍历一次),所以总的时间复杂度为 O(n) .如果我们知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为。

2024-03-12 01:06:39 174

原创 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 661

原创 LeetCode146题:LRU缓存(python3)

就不会创建字典,而是改用指针偏移量直接拿到属性对象。所以即节省了内存(没有字典)又节省了时间(省去查字典的过程)。Python 默认是用 dict 存储属性的,每次用 . 访问属性都需要查字典。

2024-03-09 00:27:54 655

原创 【无标题】

用最小堆初始把所有链表的头节点入堆,然后不断弹出堆中最小节点x,如果x.next不为空就加入堆中,循环直到堆为空,把弹出的节点按顺序拼接起来,就得到答案。

2024-03-08 23:40:08 112

原创 LeetCode148题:排序链表(python3)

使用快慢指针 fast = head.next、slow = head,让 fast 每次移动 2 步,slow 移动 1 步,移动到链表末尾,从而找到链表中心链节点,即 slow。而链表用在存储完全二叉树的时候,因为不支持随机访问的特性,导致其寻找子节点和父亲节点会比较耗时,如果增加指向父亲节点的变量,又会浪费大量存储空间。而对于链表排序而言,因为链表不支持随机访问,访问链表后面的节点只能依靠 next 指针从头部顺序遍历,所以相对于数组排序问题来说,链表排序问题会更加复杂一点。

2024-03-08 14:58:13 720

原创 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 267

原创 LeetCode2题:两数相加(python3)

代码思路:如果值大于10,那么就进位到下一个位置l1.next,然后再让l1+l2更新l2的值。

2024-03-07 14:57:26 157

原创 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 424

原创 LeetCode141题:环形链表(python3)

然而面试的时候经常碰见诸如获取倒数第k个元素,获取中间位置的元素,判断链表是否存在环,判断环的长度等和长度与位置有关的问题。一般来讲,链表中只会有一个结点的指针域为空,该结点为尾结点,其他结点的指针域都会存储一个结点的内存地址。增加元素时需要移动指定位置及之后的所有元素,然后将新增元素插入到指定位置,如果容量不足的话还需要先进行扩容操作。数组,所有元素都连续的存储于一段内存中,且每个元素占用的内存大小相同。但连续存储的缺点也很明显,增加容量,增删元素的成本很高,时间复杂度均为 O(n)。

2024-03-06 15:11:41 332

原创 LeetCode234题:回文链表(python3)

代码思路:将链表的值复制到数组列表中,再使用双指针法判断,不断更新current_node的值。

2024-03-03 13:42:44 306

原创 LeetCode206题:反转链表(python3)

【代码】LeetCode206题:反转链表(python3)

2024-03-03 13:39:45 300

原创 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 287

空空如也

空空如也

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

TA关注的人

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