自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CentOS 超详细保姆级安装教程(每步都有截图)

在 VMware 中安装和配置 CentOS 是许多系统管理员和开发者常用的虚拟化方法。首先,需要在计算机上安装 VMware Workstation 或 VMware Player,然后下载最新的 CentOS ISO 文件。启动 VMware,创建一个新的虚拟机,选择“安装程序光盘映像文件(iso)”选项,加载下载的 CentOS ISO 文件。接下来,配置虚拟机的硬件资源,包括分配内存、CPU 核心数量和硬盘空间。建议至少分配 2GB 内存和 20GB 硬盘空间以保证 CentOS 的顺利运行。

2024-09-01 11:22:48 5285

原创 Ubuntu 超详细保姆级安装教程(每步都有截图)

在 VMware 中安装和配置 Ubuntu 是一种常见的虚拟化实践,适用于开发、测试和学习目的。首先,确保已安装 VMware Workstation 或 VMware Player,并下载最新版本的 Ubuntu ISO 文件。启动 VMware,创建一个新的虚拟机,选择"安装程序光盘映像文件(iso)"选项,选择下载的 Ubuntu ISO 文件。然后,配置虚拟机的硬件设置,包括内存、处理器数量和硬盘大小等,建议至少分配 2GB 内存和 20GB 硬盘空间。

2024-09-01 11:17:03 80524 65

原创 [面试精选] 0017. 电话号码的字母组合

本文介绍了电话号码字母组合问题的解法。给定数字字符串,要求返回所有可能的字母组合(按传统电话键盘映射)。采用回溯算法,通过递归生成组合并使用固定长度字符数组优化性能。时间复杂度为O(4^n),空间复杂度为O(n×4^n)。解决方案处理了空输入的特殊情况,并避免了显式回溯操作。

2025-06-16 08:00:00 341

原创 [面试精选] 0078. 子集

文章摘要 题目要求生成整数数组的所有可能子集(包含空集),元素互不相同。采用回溯算法递归枚举所有组合,每个元素有选或不选两种选择。核心思路是使用path记录当前选择,递归终止时将path副本加入结果。时间复杂度为O(n×2^n),空间复杂度为O(n×2^n)。例如输入[1,2,3],输出包含8个子集:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]。Java实现通过成员变量存储结果和路径,递归后回溯移除元素,确保正确生成所有子集。

2025-06-16 07:00:00 455

原创 [面试精选] 0046. 全排列

本文介绍了解决数组全排列问题的回溯算法方案。题目要求返回不含重复数字数组的所有可能排列组合。核心思路是通过递归回溯,使用标记数组记录已使用数字,并构建排列路径。代码实现了固定长度路径优化,避免频繁修改列表。时间复杂度为O(n×n!),空间复杂度为O(n×n!)。该方法高效地枚举了所有排列可能,适用于典型的全排列问题场景。

2025-06-15 08:00:00 372

原创 [面试精选] 0124. 二叉树中的最大路径和

本文介绍了LeetCode 124题"二叉树中的最大路径和"的解法。题目要求找到二叉树中路径和的最大值,路径定义为任意节点序列且至少包含一个节点。解题采用后序遍历的DFS方法,计算每个节点的贡献值(节点值加左右子树贡献值的最大值),并在递归过程中更新全局最大路径和。关键点在于处理节点作为连接点时的路径计算,以及贡献值为负时的剪枝。代码使用Java实现,时间复杂度为O(n),空间复杂度最坏为O(n)。示例显示该方法能正确计算如[1,2,3]返回6、[-10,9,20,null,null,1

2025-06-15 07:00:00 386

原创 [面试精选] 0236. 二叉树的最近公共祖先

0236. 二叉树的最近公共祖先

2025-06-13 08:00:00 329

原创 [面试精选] 0437. 路径总和 iii

0437. 路径总和 iii

2025-06-13 07:00:00 436

原创 [面试精选] 0105. 从前序与中序遍历序列构造二叉树

0105. 从前序与中序遍历序列构造二叉树

2025-06-12 08:00:00 1185

原创 [面试精选] 0114. 二叉树展开为链表

0114. 二叉树展开为链表

2025-06-12 07:00:00 571

原创 [面试精选] 0199. 二叉树的右视图

0199. 二叉树的右视图

2025-06-11 08:00:00 618

原创 [面试精选] 0230. 二叉搜索树中第 K 小的元素

0230. 二叉搜索树中第 K 小的元素

2025-06-11 07:00:00 509

原创 [面试精选] 0098. 验证二叉搜索树

0098. 验证二叉搜索树

2025-06-10 08:00:00 542

原创 [面试精选] 0108. 将有序数组转换为二叉搜索树

0108. 将有序数组转换为二叉搜索树

2025-06-10 07:00:00 483

原创 [面试精选] 0102. 二叉树的层序遍历

0102. 二叉树的层序遍历

2025-06-09 08:00:00 495

原创 [面试精选] 0543. 二叉树的直径

0543. 二叉树的直径

2025-06-09 07:00:00 684

原创 [面试精选] 0101. 对称二叉树

0101. 对称二叉树

2025-06-08 08:00:00 553

原创 [面试精选] 0226. 翻转二叉树

0226. 翻转二叉树

2025-06-08 07:00:00 334

原创 [面试精选] 0104. 二叉树的最大深度

0104. 二叉树的最大深度

2025-06-07 22:07:35 657

原创 [面试精选] 0094. 二叉树的中序遍历

0094. 二叉树的中序遍历

2025-06-07 22:06:05 613

原创 [面试精选] 0146. LRU 缓存

本文介绍了LRU缓存的实现方法,使用双向链表维护访问顺序(头部最新,尾部LRU),结合哈希表实现O(1)时间的查询与更新。关键操作包括:get时移动节点至头部,put时更新或新增节点并在超容时删除尾部节点。通过哨兵节点简化边界处理,循环链表设计统一插入删除操作。该方案满足O(1)时间复杂度要求,空间复杂度为O(capacity)。代码展示了Java实现,包含节点类、哈希表映射和链表操作方法。

2025-06-06 08:00:00 358

原创 [面试精选] 0023. 合并 K 个升序链表

本文介绍了合并K个升序链表的解法。该问题通过分治策略将K路合并分解为多次两两合并,使用递归实现。算法首先将链表数组不断二分,直到单个链表后,再用合并两个有序链表的方法逐层向上合并。时间复杂度为O(NlogK),其中N为总节点数,K为链表数量;空间复杂度为O(logK),主要来自递归调用栈。该方法相比顺序合并更高效,避免了重复遍历节点。

2025-06-06 07:00:00 329

原创 [面试精选] 0148. 排序链表

文章摘要: 题目要求在O(nlogn)时间内对链表进行排序,采用归并排序算法实现。关键步骤包括使用快慢指针分割链表、递归排序子链表,以及合并两个有序链表。解法通过876题的中节点查找和21题的链表合并方法,实现了时间复杂度O(nlogn)、空间复杂度O(logn)的排序方案。代码处理了空链表和单节点边界情况,并通过哨兵节点简化合并操作。该算法充分利用链表特性,避免了数组归并排序所需的额外空间。

2025-06-05 08:00:00 703

原创 [面试精选] 0138. 随机链表的复制

题目要求复制一个包含随机指针的链表。链表的每个节点除了有next指针外,还有一个random指针可能指向任意节点或null。解法使用哈希映射(HashMap)存储原节点到新节点的映射关系,通过两次遍历完成复制:第一次遍历复制节点并建立映射,第二次遍历根据映射设置新节点的next和random指针。时间复杂度O(n),空间复杂度O(n)。

2025-06-05 07:00:00 736

原创 [面试精选] 0025. K 个一组翻转链表

题目要求将链表每k个节点作为一组进行反转,不足k个的保持原序。核心思路是统计链表长度后分组处理,使用虚拟头节点简化操作,通过三指针法反转每组节点并正确连接。时间复杂度为O(n),空间复杂度O(1)。代码实现中,外层循环处理完整k组,内层循环完成每组反转,并正确处理反转后的链表连接关系。

2025-06-04 08:00:00 603

原创 [面试精选] 0024. 两两交换链表中的节点

题目要求两两交换链表中的相邻节点,不能修改节点的值。通过虚拟头节点简化操作,使用四指针法完成交换:前驱节点指向第二个节点,第二个节点指向第一个节点,第一个节点指向下一轮起始节点。交换后更新指针继续下一轮,直到剩余节点不足两个。时间复杂度O(n),空间复杂度O(1)。

2025-06-04 07:00:00 524

原创 [面试精选] 0019. 删除链表的倒数第 N 个结点

题目要求删除链表中倒数第N个节点并返回修改后的链表。使用双指针技巧,通过虚拟头节点简化边界处理。快指针先移动N步,然后同时移动快慢指针直至链表末尾,此时慢指针指向待删除节点的前驱,直接跳过该节点即可。时间复杂度O(L),空间复杂度O(1)。

2025-06-03 08:00:00 553

原创 [面试精选] 0002. 两数相加

摘要: 题目要求将两个逆序存储的非负整数链表相加,返回同样逆序的结果链表。解法通过模拟加法运算,从链表头部(个位)开始逐位相加,处理进位。使用虚拟头节点简化操作,遍历链表直至两者均结束且进位为0。时间复杂度为O(max(n,m)),空间复杂度为O(max(n,m)),其中n和m为链表长度。示例:输入[2,4,3]和[5,6,4],输出[7,0,8](即342+465=807)。

2025-06-03 07:00:00 448

原创 [面试精选] 0021. 合并两个有序链表

本文介绍了合并两个有序链表的算法。题目要求将两个升序链表合并为一个新的升序链表,通过直接修改节点指针实现。解题思路采用归并排序的合并思想,使用虚拟头节点简化操作,比较两个链表的当前节点值,将较小的节点连接到结果链表。当一个链表遍历完后,直接将剩余链表连接。算法时间复杂度为O(m+n),空间复杂度为O(1),其中m和n为链表长度。这种方法是处理有序链表合并的高效解决方案。

2025-06-02 08:00:00 426

原创 [面试精选] 0142. 环形链表 ii

摘要 本题要求检测链表是否有环并找出环的入口节点。使用Floyd算法分两阶段解决: 判断环的存在:快慢指针遍历链表,若相遇则存在环。 寻找环入口:根据数学推导(头节点到入口的距离等于相遇点到入口的距离),重置快指针后同步移动两指针,再次相遇点即为入口。 代码实现简洁高效,时间复杂度O(n),空间复杂度O(1)。示例证明该方法适用于不同环位置的链表。

2025-06-02 07:00:00 422

原创 [面试精选] 0141. 环形链表

文章摘要: LeetCode 141题要求判断单链表是否存在环。使用Floyd判圈算法(龟兔赛跑),通过快慢指针(快指针每次两步,慢指针每次一步)遍历链表。若两指针相遇则存在环(时间复杂度O(n)),否则快指针先到达末尾说明无环。该算法空间复杂度为O(1),仅需常数额外空间。示例代码展示了Java实现,通过比较指针位置确定结果。

2025-06-01 08:00:00 378

原创 [面试精选] 0234. 回文链表

摘要: 题目要求判断单链表是否为回文链表(正反读相同)。通过快慢指针找到中间节点,反转后半部分链表,再与原链表前半部分逐一比较。关键点包括准确处理奇偶长度、仅反转后半部分以节省资源。时间复杂度O(n),空间复杂度O(1)。示例代码使用Java实现,包含找中间节点和反转链表的辅助方法。

2025-06-01 07:00:00 450

原创 [面试精选] 0206. 反转链表

文章摘要: 本文讲解了LeetCode 206题"反转链表"的解题方法。题目要求将单链表的所有节点指针方向反转。核心解法采用三指针法:使用pre、cur、nxt三个指针遍历链表,每次迭代时保存下一节点、反转当前指针、更新指针位置。代码实现简洁,时间复杂度O(n)仅需一次遍历,空间复杂度O(1)仅用常数空间。示例展示了输入[1,2,3,4,5]反转后输出[5,4,3,2,1]的效果。

2025-05-31 08:00:00 560

原创 [面试精选] 0160. 相交链表

这道题目要求找出两个单链表的相交节点。通过双指针法,让两个指针分别遍历两个链表,当一个指针到达链表末尾时跳转到另一个链表的头部继续遍历。由于两个指针最终会走过相同的路径长度(L1 + L2 - C,C为公共部分长度),它们将在相交节点处相遇或同时到达链表尾部(null)。该算法的时间复杂度为O(m+n),空间复杂度为O(1),是一种高效且节省内存的解决方案。

2025-05-31 07:00:00 529

原创 [面试精选] 0240. 搜索二维矩阵 ii

文章摘要: 本题要求在具有行列有序特性的二维矩阵中高效搜索目标值。解题关键在于从矩阵的左下角或右上角开始搜索,利用行列的单调性进行类似二叉搜索的移动策略:当前值大于目标值时向上移动,小于目标值时向右移动。该算法时间复杂度为O(m+n),空间复杂度为O(1),适用于大规模矩阵搜索。示例代码展示了从左下角出发的Java实现,通过逐次比较和指针移动快速定位目标值是否存在。

2025-05-30 08:00:00 472

原创 [面试精选] 0048. 旋转图像

这道题目要求将一个n×n的二维矩阵顺时针旋转90度,且必须原地修改矩阵。解题关键在于发现旋转90度等价于先转置矩阵(沿主对角线交换元素),再进行水平翻转(每行左右对称交换)。算法分为两步:转置和水平翻转,时间复杂度为O(n²),空间复杂度为O(1)。通过数学规律转换问题,实现了高效的原位旋转操作。

2025-05-30 07:00:00 489

原创 [面试精选] 0054. 螺旋矩阵

本文介绍了LeetCode 54题"螺旋矩阵"的解题方法。题目要求按顺时针螺旋顺序遍历二维矩阵并返回所有元素。解题采用边界收缩法,通过维护四个边界指针(左、右、上、下),依次按"右→下→左→上"方向遍历并收缩边界,直到边界相遇。算法时间复杂度为O(m×n),空间复杂度为O(1)(不考虑结果存储)。代码实现了这一过程,并处理了空矩阵等特殊情况。

2025-05-29 08:00:00 641

原创 [面试精选] 0073. 矩阵置零

摘要: 题目要求将矩阵中元素为0所在的行和列全部置零,且使用原地算法。核心思路是利用矩阵的第一行和第一列作为标记位,记录需要置零的行和列。具体步骤包括:检查第一行和第一列是否含0;遍历矩阵标记需置零的行列;根据标记位置零;最后处理第一行和第一列。时间复杂度为O(m×n),空间复杂度为O(1)。该方法高效且节省空间,适用于大规模矩阵操作。

2025-05-29 07:00:00 460

原创 [面试精选] 0041. 缺失的第一个正数

题目要求找出未排序整数数组中缺失的最小正整数,时间复杂度O(n),空间复杂度O(1)。采用原地哈希法,通过交换将数字归位到对应索引位置(x放到x-1处)。第一次遍历归位数字,第二次遍历检查首个不满足nums[i]=i+1的位置,返回i+1;若全部归位,则返回n+1。算法时间复杂度O(n),空间复杂度O(1)。

2025-05-28 08:00:00 991

原创 [面试精选] 0238. 除自身以外数组的乘积

本文介绍了LeetCode 238题“除自身以外数组的乘积”的解题方法。题目要求返回一个数组,其中每个元素是原数组中除该元素外所有元素的乘积,且不能使用除法。解题思路是使用前缀和后缀乘积数组,分别计算每个元素左边和右边元素的乘积,然后合并得到最终结果。算法通过三次遍历实现,时间复杂度为O(n),空间复杂度为O(n)。示例代码展示了如何用Java实现该算法,并通过递推计算前缀和后缀乘积数组来高效解决问题。

2025-05-28 07:00:00 448

空空如也

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

TA关注的人

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