自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣-322.零钱兑换

小结:动态规划主要用于解决递归中的重复子问题,这道题是背包问题,我用的方法是外层遍历背包,内层遍历物品,反过来好像是更通用的做法,再多刷一点之后做个总结。计算并返回可以凑成总金额所需的 最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。你可以认为每种硬币的数量是无限的。

2025-06-13 21:00:56 143

原创 力扣-279.完全平方数

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。小结:还是一维的dp,要考虑每个数用完全平方数与不用完全平方数之间哪个最优,且不大于该数的完全平方数都要试一遍。给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。

2025-06-13 15:38:54 120

原创 力扣-198.打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。小结:一维dp还是简单,没想到中等题能秒。

2025-06-12 16:01:31 164

原创 力扣-70.爬楼梯

小结:其实动规核心思想是空间换时间,这道题正常做就会超时,也算是动规入门题。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?需要 n 阶你才能到达楼顶。

2025-06-12 15:43:09 164

原创 力扣-121.买卖股票的最佳时机

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。小结:贪心算法秒了,暴力会超时,好像可以用动态规划,但是没必要小题大做,刷到动规专题再说。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。

2025-06-11 13:43:04 154

原创 力扣-347.前K个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。提示:题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。小结:题目思路比较简单,难点在于优先级队列的使用和Map的遍历。

2025-06-11 13:07:56 895

原创 力扣-739.每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。),单调栈要注意栈中存储的是未找到的日期的数组下标,当出现比栈顶温度更高的日期时,记录相差天数。小结:单调栈,暴力解法很显然时间复杂度O(n。

2025-06-10 13:32:05 136

原创 力扣-20.有效的括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。小结:用栈解决思路很清晰,看题解用了哈希表和栈结合,感觉没必要。

2025-06-09 17:00:28 231

原创 力扣-35.搜索插入位置

小结:第一个注意low=high要进循环,第二个注意找不到返回low,至于为什么我也想了很久,经过多次尝试,当循环结束时,low正好移动到了第一个大于等于target的位置。给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。

2025-06-09 16:38:57 235

原创 力扣-131.分割回文串

小结:回溯部分终于结束了,这道题不是很好理解,需要拆分的每个子串都是回文串,所以需要遍历字符串一遍,一边遍历,一边分割,一边收集,具体细节看代码吧,不想分析了。给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。

2025-06-08 18:27:15 263

原创 力扣-17.电话号码的字母组合

小结:中断了好多天回归刷题,这道题需要注意的是Java的String和数组的API与C++有很多不同,比如"23"找到2对应的"abc"和3对应的"def",之后套用回溯的模板,注意index是什么,i是什么,不要弄乱。给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

2025-06-07 20:29:05 289

原创 力扣-39.组合总和

如果至少一个数字的被选数量不同,则两种组合是不同的。这种,继续刷,回溯感觉真的难理解,尤其是。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。

2025-05-16 17:27:12 197

原创 力扣-78.子集

返回该数组所有可能的子集(幂集)。

2025-05-16 16:46:10 321

原创 力扣-46.全排列

小结:此题为回溯的经典题目,暂时当做模板记忆,等做多了应该会好些,需要注意的是java和C++的引用机制不同。,返回其 所有可能的全排列。给定一个不含重复数字的数组。

2025-05-15 19:40:54 246

原创 力扣-236.二叉树的最近公共祖先

中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(小结:题目看起来简单,实则非常不好理解,后序遍历保证顺序,找到之后向上返回,这题直接记住算了,写不下去了,无语。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

2025-05-15 12:38:48 181

原创 力扣-49.字母异位词分组

小结:这道题想到哈希表只成功了一半,还要注意哈希表的键和值,这里键是用来标记的字符串,值是对应的字符串列表。思路清晰之后,就是实现的一些细节了,比如。是不可变对象,所以需要先用字符数组来标记,还要注意不能直接用。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。,否则返回的是数组对象地址,要用。给你一个字符串数组,请你将。

2025-05-15 11:28:12 275

原创 力扣-105.从前序与中序遍历序列构造二叉树

切割数组真的很方便,大概思路就是先用先序集合确定根结点,再找到在中序的位置,之后切割、递归。,请构造二叉树并返回其根节点。小结:递归的思路也是非常清晰,

2025-05-14 16:12:44 253

原创 力扣-98.验证二叉搜索树

小结:这道题的坑就在于左子树是二叉搜索树+右子树是二叉搜索树+左子树根结点<根结点<右子树根结点,此时整棵树依然不能确定是否为二叉搜索树。解决方法是利用中序遍历+一个变量记录遍历到的值,如果不满足直接返回。,因为二叉搜索树的中序遍历是递增的序列。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。

2025-05-14 15:19:08 196

原创 力扣-108.将有序数组转换为二叉搜索树

小结:又是一道不那么简单的简单题,当时学考研数据结构的时候这种题应该是随便做的,但是时间长了又忘了,继续加油吧。排列,请你将其转换为一棵。

2025-05-14 14:35:11 222

原创 力扣-102.二叉树的层序遍历

小结:通过这道题复习了一下层序遍历的思想:用一个队列先放入根结点,每次出队时左右孩子分别进队,最后输出顺序就是层序遍历。难点是如何判断一层的结束,这里使用的方法是记录队列的大小,每遍历一层更新一次。(即逐层地,从左到右访问所有节点)。

2025-05-14 12:43:15 164

原创 力扣-1.两数之和

小结:用Java二刷hot100的第一道题,因为一刷hot100用的是C++,发现Java竟然有些生疏了,这道题思路比较简单,有了一刷的的经验也是一下子就想到了哈希表,下面总结了Java Map相关的API还有一些遗忘的知识点。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。

2025-05-13 14:43:15 910

原创 力扣-543.二叉树的直径

小结:这道题感觉依然有中等题的难度,需要转化一下思维,直径相当于左子树最大高度+右子树最大高度,同时注意这种需要在递归中不断更新并回收一个数,在C++中使用引用&的写法。这条路径可能经过也可能不经过根节点 root。是指树中任意两个节点之间最长路径的。给你一棵二叉树的根节点,返回该树的。由它们之间边数表示。

2025-05-13 12:57:43 487

原创 力扣-101.对称二叉树

小结:这道题不像是简单题了,需要想到另写一个函数,以及多个边界值的判断。给你一个二叉树的根节点 root , 检查它是否轴对称。

2025-05-13 10:41:07 227

原创 力扣-226.翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。小结:注意终止条件以及返回值。

2025-05-13 10:16:56 214

原创 力扣-104.二叉树的最大深度

小结:树这部分的题目,只要能用递归还是比较简单的,秒了。是指从根节点到最远叶子节点的最长路径上的节点数。给定一个二叉树 root ,返回其最大深度。

2025-05-13 10:07:13 178

原创 力扣-94.二叉树的中序遍历

小结:做简单题就是心情舒畅,注意单写一个函数就好了。给定一个二叉树的根节点 root ,返回 它的。

2025-05-12 16:46:09 278

原创 力扣-138.随机链表的复制

主要思路是拼接+拆分,需要注意的点都写在注释里,还有一种哈希表解法没有看,从现在开始想用Java同步二刷hot100,我会新建一个专栏,欢迎关注阅读。节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。深拷贝应该正好由 n 个。

2025-05-12 16:30:43 477

原创 力扣-24.两两交换链表中的结点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。小结:后来才看到不能修改结点值,但是也不难。

2025-05-09 14:48:06 296

原创 力扣-19.删除链表的倒数第N个结点

小结:这道题也是比较简单,难点依然在边界值处理,给链表加一个头结点会比较方便后续的运算。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

2025-05-09 14:17:07 196

原创 力扣-2.两数相加

小结:上面的写法有一些冗余,但是思路看起来比较清晰,也是一遍过了。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。

2025-05-09 13:05:42 255

原创 力扣-21.合并两个有序链表

新链表是通过拼接给定的两个链表的所有节点组成的。小结:思路简单,注意头结点边界即可。将两个升序链表合并为一个新的。

2025-05-09 12:27:10 185

原创 力扣-142.环形链表II

根据图示推导出这个公式,之后让快指针回到起点,并和慢指针以同样的速度移动,会发现快指针走距离a的时候,慢指针正好走距离c+(n-1)圈,即快慢指针在入环点相遇。需要注意的是本题有一个边界样例,只有一个结点且没有环,需要额外判断一下。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。小结:这道题在上一道题的基础上,不仅要判断是否有环,还要返回入环结点。

2025-05-08 16:55:14 278

原创 力扣-141.环形链表

如果链表中存在环 ,则返回 true。否则,返回 false。给你一个链表的头节点 head ,判断链表中是否有环。小结:快慢指针,简单题秒了。

2025-04-25 16:49:39 260

原创 力扣-234.回文链表

小结: 这种做法思路比较清晰,而且可以满足O(n) 时间复杂度和 O(1) 空间复杂度。给你一个单链表的头节点 head ,请你判断该链表是否为。如果是,返回 true;否则,返回 false。

2025-04-25 16:03:53 304

原创 力扣-206.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。小结:头插法秒了,唯一需要注意的点在于这里给的是不含头结点的单链表。

2025-04-25 15:13:39 223

原创 力扣-160.相交链表

小结:链表题好久没做了,从这里重新回忆起来链表的内容,这道题思路很巧妙,如图(来自力扣题解)第一个指针p1走a+b-c,第二个指针走b+a-c,如果有公共结点,那么按照这种遍历方法一定会重合。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。,函数返回结果后,链表必须。整个链式结构中不存在环。

2025-04-25 14:27:42 247

原创 力扣-240.搜索二维矩阵 II

小结:这道题用了一个巧妙但是难以想到的思路,不是从左上角或右下角遍历,而是从右上角(或左下角),以从右上角开始为例,若小于target向下遍历,大于target向左遍历,这样保证只有一个固定的前进方向,直到找到或者越界停止。编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。

2025-04-22 13:58:37 357

原创 力扣-48.旋转图像

小结:本题的难点还是确定边界,哪些位置需要进行遍历旋转,其实并不需要一整行的元素都进行旋转,下面引用了力扣题解的一张图,思路非常的清晰。给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。旋转图像,这意味着你需要直接修改输入的二维矩阵。使用另一个矩阵来旋转图像。

2025-04-22 13:02:02 133

原创 力扣-54.螺旋矩阵

小结:矩阵问题难点就是边界值,刚开始我只想到了用一个偏移量来控制每次的循环,但是在边界出了很多问题,最后也是采用上面这种简单易懂的方法,相当于动态调整边界。给你一个 m 行 n 列的矩阵 matrix ,请按照。,返回矩阵中的所有元素。

2025-04-21 16:20:46 109

原创 力扣-73.矩阵置零

小结:这道题由于题目中要求原地,即不用额外存储空间,所以需要矩阵的首行首列暂时存储该行/列是否有0的信息,这就导致边界判断非常麻烦。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。按照这个图的思路来做,思路还是很清晰的,但是代码中也有很多小技巧可以避免重复遍历。

2025-04-18 20:08:47 145

空空如也

空空如也

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

TA关注的人

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