自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode79.单词搜索

【大厂程序员带你刷力扣】【LeetCode 79】单词搜索|DFS。暴力枚举起始点,然后进行dfs+回溯。

2025-04-01 21:46:03 25

原创 leetcode22.括号生成

这道题目是一道回溯题,特殊之处在于右括号选择时,右括号的当前数量必须少于左括号的数量。

2025-04-01 21:06:01 42

原创 leetcode25.k个一组翻转链表

【力扣hot100】【LeetCode 25】k个一组翻转链表|虚拟节点的应用。

2025-04-01 16:55:21 85

原创 leetcode208.实现Trie(前缀树)

其实这就是一个多叉链表,为了更快获取子结点,子节点采用哈希表,维护一个字段isEnd判断是否是叶子结点。【大厂程序员带你刷力扣】【Leetcode 208】实现Tire(前缀树)

2025-04-01 12:58:16 27

原创 leetcode207.课程表

这种先后顺序问题采用有向图存储,统计每个顶点的入度情况,然后采用拓扑排序算法看看是否能让所有顶点的入度全部为0,如果可以那么拓扑成功。【大厂程序员带你刷力扣】【LeetCode 207】课程表|拓扑排序|BFS。

2025-04-01 10:44:19 45

原创 leetcode994.腐烂的橘子

这里图中的腐烂的的橘子是同时对周围进行腐化,所以采用多源bfs就能解决。多源bfs与单源bfs的区别就在于队列取出时一轮是取出队列当中的全部元素。【力扣hot100】【LeetCode 994】腐烂的橘子|多源BFS。

2025-03-31 22:19:47 198

原创 leetcode146.LRU缓存

put一个键值对时,采用头插法将缓存块置于等级较高的位置,如果put数量超出限制,那么就将尾部的缓存块删除,以此达到置换的一个效果。get一个键值对也是同样的思路,如果不命中直接返回-1,如果命中先删除缓存块再头插缓存块,这样就达到了访问后更新缓存块等级的目的。【面试高频】146. LRU 缓存。采用哈希表+双向链表。

2025-03-31 21:02:53 242

原创 leetcode23.合并k个升序链表

套用归并排序的思想,要排序这k个链表,先排序好前k/2个链表,再排序好后k/2个链表,最后将这两个链表用普通的两链表合并就能解决问题。

2025-03-31 17:04:13 142

原创 leetcode437.路径总和|||

对于根结点来说,可以选择当前结点为路径也可以不选择,但是一旦选择当前结点为路径那么后续都必须要选择结点作为路径,不然路径不连续是不合法的,所以这里分开出来两个方法进行递归。由于力扣最后一个用例解答错误,分析发现targetSum减法多次后可能越界之类的情况把参数类型改为了long。

2025-03-30 22:26:40 175

原创 leetcode144.二叉树展开为链表

然后记录当前结点的右子树起始点temp,把当前结点右指针指向左子树,左子树的最右下边的结点的右指针指向一开始记录的temp,最后就拉平成链表了。对于当前结点来说,先把左子树全部拉平成链表,再把右子树也全部拉平成链表。leetcode-树篇 114题 二叉树展开为链表。

2025-03-30 21:37:22 225

原创 leetcode124.二叉树中的最大路径和

【代码】leetcode124.二叉树中的最大路径和。

2025-03-30 20:51:15 296

原创 leetcode148.排序链表

【力扣hot100】【LeetCode 148】排序链表|归并排序的应用。先使用一个快慢指针将链表一分为二,然后进行排序归并。

2025-03-30 20:11:32 177

原创 leetcode138.随即链表的复制

采用一个哈希表,键值对为<原链表的结点,新链表的结点>,第一次遍历原链表结点时只创建新链表的结点,第二次遍历原链表结点时,通过键拿到新链表结点,新链表结点的next指向哈希表中键为原链表结点的next的值,random同理。【力扣hot100】【LeetCode 138】随机链表的复制|哈希表。

2025-03-30 16:30:43 239

原创 leetcode230.二叉搜索树中第k小的元素

中序遍历,第k次出现的数值就是结果。

2025-03-28 22:03:48 159

原创 leetcode153.寻找旋转排序数组中的最小值

【小白都能听懂的算法课】【力扣】【Leetcode153】寻找旋转排序数组中的最小值|二分查找|数组。

2025-03-28 21:26:43 109

原创 leetcode33.搜索旋转排序数组

主要是数组旋转后分为左右两个升序区间 ,如果mid落在左区间并且目标大小也在left-mid中,那么right右缩。【小白都能听懂的算法课】【力扣】【Leetcode33】搜索旋转排序数组 | 二分查找 | 数组。

2025-03-28 21:12:02 208

原创 leetcode74.搜索二维矩阵

把二维数组展开成一维,发现随着索引增加,值增大,那么其实这就是普通的二分查找。

2025-03-28 16:25:26 309

原创 leetcode543.二叉树的直径

当前顶点作为拐点时,求左子树加上右子树的高度可以求出该通过该顶点的直径大小,再对该顶点和左右子节点作为拐点时直径大小进行比对,返回最大值。

2025-03-27 21:49:37 151

原创 leetcode141.环形链表

直接快慢指针,如果有环,那么快指针一定会在成环的起始点与慢指针相遇。

2025-03-27 20:05:12 175

原创 leetcode234.回文链表

先利用快慢指针将链表一分为2,后半部分链表进行反转,然后两个链表一一比对就可以判断是否回文了。

2025-03-27 19:49:57 155

原创 leetcode160.相交链表

m统计A的长度,n统计B的长度,让长的一方先移动m-n个结点保证两者从同一起点出发,接下来就二者同时右移找到相交结点就行。基本思路是让两个链表从“同一个起点”出发,当两点相遇时就是相交结点。

2025-03-27 17:26:19 218

原创 leetcode240.搜索二维矩阵||

从右上角开始,往左移动就是变小,往下移动就是增加,类似于二叉搜索树,当目标大于矩阵只就下移,小于就左移。

2025-03-27 17:05:42 325

原创 leetcode48.旋转图像

从4*4矩阵开始,将顶层放到右侧,右侧放到下层,下层放到左侧,再对中间的2*2重复这个操作,以此类推。【大厂程序员带你刷力扣】【LeetCode 48】旋转图像。

2025-03-27 16:32:39 161

原创 leetcode73.矩阵置零

方法二:在方法一的基础上优化空间复杂度,用第一行和第一列代替方法一中的行数组和列数组,但是这样会导致第一行变动,结果错误,为此引入两个变量,一个记录第一行是否需要全部置为0,另一个记录第一列是否需要全部置为0。方法一:采用两个数组,行数组记录哪些行的所有元素需要全部置为0,列数组需要记录哪些列的所有元素需要全部置为0。

2025-03-27 15:31:33 315

原创 leetcode41.缺失的第一个正数

这个最小正数的结果一定在1~nums.size()+1之中,这里利用原地哈希的做法,将num放在num-1索引处(num非正数或者大于数组长度则随意放置);原地哈希完毕后进行遍历,对于没有按照如上规则放置的数,它的索引+1即为最终结果。

2025-03-26 21:57:05 209

原创 leetcode238.除自身意外数组的乘积

方法一:最直观的想法就是把所有元素累乘起来,最后遍历除以每一个元素就能得到目标数组,但是要注意0元素的影响,如果没有0元素直接全部累乘,如果存在1个0元素,那么只有0元素所在位置为总的非零累乘积,如果存在多个0元素那么结果是全0。方法二:使用前缀积和后缀积,前缀积求当前元素左边所有元素的乘积,后缀积求当前元素右边所有元素的乘积,二者相乘就是当前的结果。

2025-03-26 20:53:13 230

原创 leetcode.189.轮转数组

需要注意的是向又轮转k个时,如果超出数组长度,要对其进行取模运算才是正确的向右轮转个数。第一次全反转,第二次反转前k个,第三次反转后n-k个。

2025-03-26 20:14:31 240

原创 leetcode560.和为k的子数组

【代码】leetcode560.和为k的子数组。

2025-03-26 15:43:46 204

原创 leetcode3.无重复字符的最长字串

【代码】leetcode3.无重复字符的最长字串。

2025-03-25 21:52:30 223

原创 leetcode11.盛水最多的容器

双指针问题,指向前后边界,每次只移动高度较小的那个。

2025-03-25 20:52:07 221

原创 leetcode128.最长连续序列

可以用哈希表解决,先遍历选取每一个元素num作为起始值,然后判断num+1是否也在数组中,如果在就序列长度+1,但是用哈希表这么做实际上时间复杂度为o(n^2),为了降低到n,每一个元素只能访问一次,那么也就是如果num做为起始值,那么他的前驱num-1是不能在数组中的,这样就可以避免重复访问。然而虽然代码和官方差不多还是有用例超时,对于如下这种有m个0的如果作为起始值,后续还有1,2,3,4让其进入内层循环的,时间复杂度为o(mn),为了避免这种情况还得对0去重。

2025-03-24 22:20:49 178

原创 leetcode685.冗余连接II

对于下图这个情况就是选择删除【3,1】或者【2,1】,这里的选择是有讲究的,如果选择删除【3,1】,那么剩余的n-1个顶点和n-1个边必定构成环(用并查集可以判定);所以选择删除【2,1】,剩余的顶点和边正好构成有向树。但是下面这个实例不行,如果直接用并查集删除的是【1,4】,没有保证树只有一个根节点且没有保证是有向树(顶点1被两个顶点指向)第二种情况是不存在入度为2的顶点,只存在入度为1的顶点,也就是官方给的实例1和2,对于这种情况其实就是冗余连接I的情形,只需要用并查集找到多余的边删除就行。

2025-03-22 12:27:33 320

原创 leetcode684.冗余连接

依旧是并查集问题,这道题目正好给定顶点数目和边的数目相等,只要找到其中的一条边删除将图转化为树就行,而这个多余的边起始就是并查集的添加过程中二者是同一个根(两个顶点早已经联通了),这时直接返回这条边就行。注意这题中的顶点编号从1开始,为保证一致性,father数组大小为n+1,0索引不使用。

2025-03-21 21:00:13 325

原创 leetcode1971.寻找图中是否存在路径

初尝并查集,直接套用模板。

2025-03-21 20:36:11 184

原创 leecode463.岛屿的周长

不需要光度搜索和深度搜索,只是普通的数学问题,周长是岛屿陆地数量*4-相邻边数*2,这里遍历时计算上边和左边是否相邻陆地,不统计下边和右边是为了防止重复计算。

2025-03-21 18:09:37 158

原创 leetcode127.单词接龙

而这里的两个单词是否相连不是真的把他们弄成一张图,而是采用暴力枚举,逐个尝试替换字母,然后判断替换后的单词是否在原来的字典中,如果在,那么二者就是相连的。本题的思路就是将所有可转换的序列相连,构成图,然后选择起始词作为广度优先遍历的起点,那么就能找到转换的最小步骤数。

2025-03-20 22:03:36 311

原创 leecode827.最大人工岛

先统计各个岛屿的面积,用哈希表存储岛屿编号以及它们各自的面积,最后再从海洋中挑选某一块尝试填充并累加上下左右的不同编号的岛屿的面积,遍历求解最大值就行了。这里唯一需要注意的是如果全是陆地那么要额外引入一个isAllIsland布尔变量判断是否是全陆地,如果是直接返回n*n。

2025-03-19 21:53:35 151

原创 leecode417.太平洋大西洋水流问题

由海洋逆推回到经过的坐标,用dfs方式将海洋逆推回去的坐标都设置为true,那么只要这个坐标能被太平洋和大西洋逆推为true,那么就添加到结果集中。

2025-03-18 22:14:35 205

原创 leecode1254.统计封闭岛屿的数目

这道题咋一看很难,但是可以转换,将所有靠近边界的非封闭岛屿都变成海洋后,那么剩下的岛屿就是封闭岛屿,最后的问题其实就是求解连通分量个数。

2025-03-18 21:19:07 224

原创 leecode695.岛屿的最大面积

跟求岛屿数量的题目差不多,依旧是深度搜索或者广度搜索问题。

2025-03-15 20:51:09 160

空空如也

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

TA关注的人

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