自定义博客皮肤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)
  • 收藏
  • 关注

原创 高频-临时抱佛脚篇

时间复杂度是o(n^2)

2026-09-04 19:18:39 29

原创 Leetcode-hot100(2026.08.17)

一遍又一遍,啥时候可以记住啊?想要一个offer,脱离手撕苦海

2026-08-17 10:54:32 439

原创 高频-二叉树

【代码】高频-二叉树。

2026-03-04 02:19:25 59

原创 高频-链表

【代码】高频-链表。

2026-03-04 01:30:14 68

原创 高频-数组

【代码】高频-数组。

2026-03-03 20:46:09 168

原创 高频-二分/排序

leetcode会超时,但是重点掌握思想!

2026-03-03 02:06:29 41

原创 高频-栈/队列

【代码】高频-栈/队列。

2026-03-03 01:03:03 69

原创 高频-双指针

【代码】高频-双指针。

2026-03-03 00:04:26 66

原创 高频-回溯/搜索

【代码】高频-回溯/搜索。

2026-03-02 23:04:30 80

原创 高频-动态规划篇

【代码】动态规划篇。

2026-03-02 15:54:17 70

原创 hot100-技巧

对 nums 数组建图,每个位置 i 连一条 i→nums[i] 的边,同时i连一条i→(i+1)的边。我们先设置慢指针 slow 和快指针 fast ,慢指针每次走一步,快指针每次走两步,根据「Floyd 判圈算法」两个指针在有环的情况下一定会相遇,此时我们再将 slow 放置起点 0,两个指针每次同时移动一步,相遇的点就是答案。首先从后向前查找第一个顺序对 (i,i+1),满足 a[i]<a[i+1]。双指针:维护p0和p1,p0代表0可以插入的下一个元素的位置,p1代表1可以插入的下一个元素的位置。

2026-02-27 21:36:17 626

原创 hot100-多维动态规划

时间复杂度:O(n^2)空间复杂度:O(n^2)时间复杂度:O(n^2)空间复杂度:O(n^2)时间复杂度:O(n^2)空间复杂度:O(n^2)时间复杂度:O(n^2)空间复杂度:O(n^2)时间复杂度:O(n^2)空间复杂度:O(n^2)

2026-02-26 14:30:16 88

原创 hot100-动态规划II

值,绝对是上一轮遗留下来的、还没加上当前物品的“干净”状态。【要满足0-1背包,需要从大到小,这样数组还没有被这一层的替换】每次循环,拿出一个数字(物品),考虑要不要把它放进背包。我们看当前这个物品,在不同容量的背包下,能发挥什么作用。,把它放进背包后,背包里的总和增加的值(价值)也是。还是上一轮的状态(还没被当前的数字 2 污染)。因为是从后往前更新的,当更新右边(大容量)的。重量和价值: 物品占用的背包容量(重量)是。值时,它需要用到的左边(小容量)的。也还是上一轮的老数据。就是背包的最大容量。

2026-02-24 20:42:00 351

原创 hot100-动态规划I

那么i=1就代表仅仅考虑体积1的物品,此时一更新,发现每个j容量背包都需要容纳j的物品;当i=2就代表开始考虑体积4的物品,此时我们仅仅从j=4开始【其他j装不下】,此时利用dp[0]发现捷径dp[4]=1,然后同时更新dp[5]=1+1=2。因为外层是容量在一点点变大,对于每一个容量,内层都会把所有可能的物品尝试一遍。它保证了物品是按一定顺序被放入背包的,比如完全平方数问题中先放尽所有的 1,再放 4。是外层循环(物品数量),内层是n-i**2,起决定作用的还是n(背包容量)的最少物品数就好了。

2026-02-22 11:34:29 83

原创 hot100-贪心

是解决股票问题的最佳思路【本题股票:仅允许买卖一次,无手续费】空间复杂度:O(∣Σ∣) # 其实这里的∣Σ∣最大是26。时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(n)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)

2026-02-21 12:02:05 90

原创 hot100-堆

时间复杂度:O(n) # 不是很理解,但是这个在leetcode上时间会超时,必须按照官方的一个特殊的边界条件去写,利用=的判断,写do-while循环,才可以通过全是1的那个示例。空间复杂度:O(n) # 因为字典还是需要O(n),heapq需要O(k)时间复杂度:O(nlogn) # 本质就是堆排序。空间复杂度:O(logn) # 栈空间。空间复杂度:O(logn) # 栈空间。空间复杂度:O(n) # 两个堆的开销。时间复杂度:O(nlogn)空间复杂度:O(n)

2026-02-20 13:18:04 308

原创 hot100-栈

每当我们找到了一个比栈顶元素小的元素,那么对于栈顶元素,倒数第二个元素和未入栈的元素是比当前元素小的元素,那么要算以当前栈顶元素为高的最大面积就是中间的间隔*栈顶元素的高度。也就是说,对于每一个栈顶元素-1,-2的位置对应的温度会更高。当一个新的元素入栈前,如果比当前的栈顶元素来得高,那么栈顶元素对应的下一个最大元素就找到了。可以维护一个存储下标的单调栈,从栈底到栈顶的下标对应的温度列表中的数值递减。也就是说,对于每一个栈顶元素-1,-2的位置对应的柱子会更低。所有操作的时间复杂度:O(1)

2026-02-19 16:29:42 612

原创 hot100-二分查找

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)# 很巧妙的写法,可以只使用一个函数res = midelse:return res""""""# 我们只要想办法找到第一个等于target的下标1# 然后找到最后一个等于target的下标2# 所以其实是我们找到第一个大于等于的下标就是1# 我们找到的第一个大于的下标就是2时间复杂度:O(logn)空间复杂度:O(1)

2026-02-16 10:48:27 432

原创 hot100-回溯II

时间复杂度:O(n⋅2^n ) # n 是字符串 s 的长度。在最坏情况下,s 包含 n 个完全相同的字符,任意一种划分方法都满足要求,划分方案数为 2^(n−1)=O(2^n),每一种划分方法需要 O(n) 的时间求出对应的划分结果并放入答案,总时间复杂度为 O(n⋅2^n)。空间复杂度:O(MN) # O(MN) 的 visited 数组,栈的深度最大为 O(min(L,MN))。空间复杂度:O(n^2) # 回溯需要O(n) 的栈空间以及 O(n) 的用来存储当前分割方法的空间。

2026-02-14 14:16:43 113

原创 hot100-回溯I

时间复杂度:O(n*n!时间复杂度:O(n*2^n) # n个位置,每次选择或者不选择【这是一个比较宽松的上界】,经过剪枝没有这么高。时间复杂度:O(n×(2^n)) # 一共 2^n个状态,每种状态需要 O(n) 的时间来构造子集。空间复杂度:O(target) # 栈的递归深度,最差是target,即1+1+。时间复杂度:O(3^m+4^n) # m是3个字母的数字的个数,n是4个字母的数字的个数。空间复杂度:O(n) # path需要O(n),递归时栈的最大深度是n。

2026-02-13 11:57:29 335

原创 hot100-图论

在广度优先搜索的每一步中,取出队首的节点 u,将 u 的所有相邻节点的入度减少 1【移除下一个节点的入边】。初始时,所有入度为 0 的节点都被放入队列中,作为拓扑排序最前面的节点,并且它们之间的相对顺序无关紧要。空间复杂度:O(T⋅Σ),其中 T为所有已经插入字符串的长度之和,Σ 为字符集的大小,这里是26。时间复杂度:初始化为 O(1),其余操作为 O(n),n是每次插入或查询的word的长度。空间复杂度:O(min(M,N)) # 最坏情况:全是陆地,队列最大就是存一行或一列。

2026-02-12 13:22:03 779

原创 hot100-二叉树III

空间复杂度:O(H) # 树的高度,平均是log N 最差是N。时间复杂度:O(N^2)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(1)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)

2026-02-10 12:57:27 73

原创 hot100-二叉树II

空间复杂度:O(log N) # 平衡二叉搜索树!时间复杂度:O(H+k) # H是树的高度,平均是log N。时间复杂度:O(H+k) # H是树的高度,平均是log N。空间复杂度:O(H) # H是树的高度,平均是log N。空间复杂度:O(H) # H是树的高度,平均是log N。如果使用迭代的思想实现中序遍历,可能更加直观。时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)

2026-02-09 11:03:13 342

原创 hot100-二叉树I

空间复杂度:O(H) 【H 平均是log N的高度,最差是N】空间复杂度:O(H) 【H 平均是log N的高度,最差是N】空间复杂度:O(H) 【H 平均是log N的高度,最差是N】补充:前序遍历 and 后序遍历。空间复杂度:O(n)时间复杂度:O(n)时间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(N)时间复杂度:O(N)

2026-02-07 16:08:38 95

原创 hot100-链表III

每个节点在每层合并中只被处理一次,有logK层,每层总工作量都是O(N)(因为每层都要处理所有N个节点)总时间复杂度 = N × logK = O(N log K)空间复杂度:O(log K) # 分治递归深度为log₂K,每次递归调用需要常数空间(存储左右指针和中间值)递归栈空间 = O(log K)时间复杂度:O(N log K) # 最小堆里面插入取出时间复杂度是O(log k) 对于每个元素都可能有以上处理。空间复杂度:O(n/k) # 因为实际上栈只有n/k层。空间复杂度:O(n)

2026-02-05 15:06:31 390

原创 hot100-链表II

时间复杂度:O(m+n)时间复杂度:O(m+n)空间复杂度:O(m+n)时间复杂度:O(m+n)空间复杂度:O(1)空间复杂度:O(n)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(n)

2026-02-04 13:19:00 74

原创 hot100-链表I

其实递归和栈的本质差不多【栈思路好理解】空间复杂度:O(n) # 栈空间。空间复杂度:O(n) # 栈空间。空间复杂度:O(n) # 栈空间。时间复杂度:O(m+n)时间复杂度:O(m+n)空间复杂度:O(1)空间复杂度:O(n)空间复杂度:O(n)空间复杂度:O(m)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)时间复杂度:O(n)时间复杂度:O(n)时间复杂度:O(n)时间复杂度:O(n)时间复杂度:O(n)空间复杂度:O(1)

2026-02-02 15:13:52 87

原创 hot100-矩阵

但是以上的做法没有用到列的单调信息。时间复杂度:O(mlogn)空间复杂度:O(m+n)时间复杂度:O(m+n)时间复杂度:O(mn)时间复杂度:O(mn)时间复杂度:O(nn)空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(1)

2026-02-01 16:13:26 107

原创 hot100-普通数组

时间复杂度:O(NlogN) # 复杂度来自于排序!时间复杂度:O(N) # 数组叠加需要时间复杂度!时间复杂度:O(N) 每个元素最多被操作两遍。空间复杂度:O(N) # 两个数组。空间复杂度:O(N) # res。时间复杂度:O(N) 取元素。时间复杂度:O(N)空间复杂度:O(1)时间复杂度:O(N)空间复杂度:O(N)空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(N)时间复杂度:O(1)

2026-01-30 15:10:36 56

原创 hot100-子串

那么遍历数组的O(N)是不可少的,我们希望让获取max的操作变成O(1);假如我们仅仅是每遍历一个数组,仅仅记录最大值,但是我们就不知道这个最大值什么时候从当前窗口弹出!【查看栈顶或者弹出栈顶,都是对列表最后一个元素操作,时间复杂度差不多!题目看起来很简单,但是我们如果在每个子数组中都去统计最大值,那么时间复杂度就会很高O(kN),最终会超时!时间复杂度:O(N) 【每个元素除被遍历外,最多入对一次,出队一次 最多3N】空间复杂度:O(k) 【队列的最大长度就是k】空间复杂度:O(N)

2026-01-29 16:32:31 342

原创 hot100-滑动窗口

时间复杂度:O(m+(n−m)×Σ),其中 n 为字符串 s 的长度,m 为字符串 p 的长度,Σ 为所有可能的字符数。O(m) 来统计字符串 p 中每种字母的数量;需要 O(m) 来初始化滑动窗口;需要判断 n−m+1 个滑动窗口中每种字母的数量是否与字符串 p 中每种字母的数量相同,每次判断需要 O(Σ)。但是本质上最多slow和fast两个指针各自遍历一遍,所以还是O(N)空间复杂度:O(Σ)。用于存储字符串 p 和滑动窗口中每种字母的数量。空间复杂度:O(M) m是不重复字符的个数。

2026-01-28 15:23:31 283

原创 hot100-双指针

如果仅仅是找出有没有一组满足两数之和的数,但是并不要求输出组合时,使用集合解决两数之和,但是如果要求输出满足的组合时,集合不好用,会丢失组合!尽管使用了栈,但是每个元素最多被入栈和弹出一次,所以时间复杂度还是O(N),如果使用二分查找处理第二个元素和第三个元素,不会更快,因为理论上是。时间复杂度:O(N) 每个位置至多被遍历两遍。时间复杂度:O(N) 每个位置至多被遍历两遍。空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(N)时间复杂度:O(N)空间复杂度:O(1)

2026-01-27 15:31:24 295

原创 hot100-哈希

由于我们每次只会让连续子序列的最小的那个数进入内循环,在内循环中会遍历这个连续子序列,所以最终时间复杂度还是O(N);空间复杂度也是O(N)【集合开销】时间复杂度:O(Nklogk) k是字符串的最大长度,klogk是排序的时间复杂度。从以下的列表就可以看到显式的时间复杂度O(N)空间复杂度:O(N) 【哈希表开销】空间复杂度:O(Nk)时间复杂度:O(N)

2026-01-26 11:19:36 304

原创 Day53-图论

无权图,没必要用dj等算法,仅仅使用深搜或者广搜;当然,广搜最合适,因为第一次出现目标点,就是最短路径的长度!不要被图论迷惑,不需要任何搜索技巧,仅仅是遍历,只要是岛屿边界【水或者是陆地】,+1即可。这个题用深搜和广搜都可以,但是根据题意很容易想到,用邻接表存储图肯定是最方便的。——仅仅一个字符不相同即可!

2026-01-20 23:08:45 436

原创 Day51-图论

逆向思考:我们找到第一边界和第二边界从低往高走的所有点,两个的交集就是我们要找的“高山”。可以构造一个visited,将周边全部记录为1,中间的孤岛的visited不查看,最后全部置为0。暴力思路:遍历每一个节点,对于每个节点使用深搜或者广搜,看看是否会达到边界(时间复杂度。但是也可以直接使用graph,将非孤岛置为2,最后还原!)由于不会重复访问同一个节点,所以实际复杂度更低。

2026-01-20 14:52:15 381

原创 Day50-图论

【代码】Day50-图论。

2026-01-19 16:42:29 234

原创 Day49-图论

【代码】Day49-图论。

2026-01-19 15:19:25 271

原创 Day48-单调栈

【代码】Day-48。

2026-01-16 21:19:51 204

原创 Day47-单调栈

【代码】Day47-单调栈。

2026-01-16 16:45:57 148

原创 Day46-动态规划

【代码】Day46-动态规划。

2025-12-01 03:35:09 189

空空如也

空空如也

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

TA关注的人

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