自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-09-01 11:22:48 5483

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

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

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

原创 [面试精选] 0739. 每日温度

题目要求根据每日温度数组,计算每一天需要等待多少天后会出现更高温度。采用单调栈方法,栈中存储未找到更高温度的索引,遍历数组时比较当前温度与栈顶温度,弹出栈顶并计算等待天数。该方法的时间复杂度为O(n),空间复杂度为O(n)。示例代码使用Java实现,通过维护单调递减栈高效解决问题。 关键词:每日温度、单调栈、时间复杂度O(n)、索引存储、等待天数

2025-07-15 07:00:00 361

原创 [面试精选] 0394. 字符串解码

题目要求解码形如 k[encoded_string] 的嵌套编码字符串,例如 3[a2[c]] 解码为 accaccacc。采用双栈法:一个栈存储重复次数,另一个栈存储外层字符串。遍历字符时:数字计算重复次数;[ 压栈并重置状态;] 弹栈拼接重复后的字符串;字母直接拼接。时间复杂度为 O(n)(均摊分析),空间复杂度为 O(n)(栈和字符串存储)。代码通过栈处理嵌套结构,确保正确解码。

2025-07-14 08:00:00 581

原创 [面试精选] 0155. 最小栈

设计一个能在常数时间内获取最小元素的最小栈(MinStack)。通过使用双栈法(一个主栈存储元素,一个辅助栈同步存储当前最小值),实现了所有操作的时间复杂度均为O(1)。具体实现中,push()和pop()操作同步更新两个栈,getMin()直接返回辅助栈顶元素。空间复杂度在最坏情况下为O(n)。该方法高效地满足了题目要求,适用于需要快速获取栈最小值的场景。

2025-07-14 07:00:00 819

原创 [面试精选] 0020. 有效的括号

题目要求判断仅包含括号字符 '(){}[]' 的字符串是否有效。有效条件包括:括号类型匹配、顺序正确且成对闭合。采用栈结构辅助,遍历时左括号入栈,右括号与栈顶匹配则出栈,否则无效。使用哈希表存储括号映射,提前校验奇数长度字符串。时间复杂度O(n),空间复杂度O(n)。关键点:栈的LIFO特性确保括号顺序正确,双端队列优化栈操作效率。 核心思路:栈匹配法 + 哈希表快速查询。

2025-07-13 08:00:00 520

原创 [面试精选] 0004. 寻找两个正序数组的中位数

题目要求找出两个有序数组的中位数,时间复杂度需为O(log(min(m,n)))。解题核心是二分查找法:将两个数组分割为左右两部分,确保左边部分的所有元素小于右边部分,并通过调整分割点满足条件。关键点包括保证nums1为较短的数组,使用哨兵节点简化边界判断,最终根据元素总数的奇偶性返回中位数。时间复杂度为O(log(min(m,n))),空间复杂度为O(m+n)(可优化至O(1))。

2025-07-13 07:00:00 430

原创 [面试精选] 0153. 寻找旋转排序数组中的最小值

题目要求设计一个时间复杂度为O(log n)的解决方案。通过二分查找算法,比较中间元素与最后一个元素的值,逐步缩小搜索范围:若中间元素小于末尾元素,说明最小值在左半部分;否则在右半部分。最终返回右边界指向的元素即为最小值。该算法的时间复杂度为O(log n),空间复杂度为O(1)。

2025-07-12 08:00:00 685

原创 [面试精选] 0033. 搜索旋转排序数组

题目要求在旋转后的有序数组中查找目标值,并返回其下标或-1。通过二分查找确定旋转点,将数组分为两部分,再根据目标值选择合适的有序区间进行查找。核心算法包括两步:先找到最小值位置,再在对应区间执行二分搜索。时间复杂度为O(log n),空间复杂度为O(1)。代码通过findMin定位旋转点,lowerBound进行标准二分查找,确保高效性和正确性。

2025-07-12 07:00:00 555

原创 [面试精选] 0034. 在排序数组中查找元素的第一个和最后一个位置

通过两次二分查找:第一次定位目标值的起始位置,第二次通过查找目标值+1的位置减1得到结束位置。关键点在于利用lowerBound函数高效定位边界,同时处理目标值不存在的情况。算法时间复杂度为O(log n),空间复杂度为O(1),适用于大规模数据的高效查询。代码实现简洁,通过开区间二分查找确保正确性和效率。

2025-07-11 08:00:00 349

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

该题目要求在满足特定排序条件的二维矩阵中查找目标值。矩阵每行从左到右递增,且每行首元素大于前一行末元素。解法利用二分查找,将二维矩阵视为一维有序数组处理,通过数学计算转换索引(mid索引对应行号为mid/列数,列号为mid%列数)。时间复杂度为O(log(m×n)),空间复杂度O(1)。核心思路是结合矩阵的全局有序性,直接应用二分搜索算法。

2025-07-11 07:00:00 352

原创 [面试精选] 0035. 搜索插入位置

题目要求在已排序数组中找到目标值的索引或插入位置。使用二分查找算法,初始边界设为-1和数组长度,通过循环不断缩小范围,最终返回第一个大于等于目标值的位置。时间复杂度为O(log n),空间复杂度为O(1)。该解法高效且符合题目对时间复杂度的要求。

2025-07-10 09:00:00 595

原创 [面试精选] 0051. N 皇后

该问题要求在N×N棋盘上放置N个互不攻击的皇后,即它们不在同一行、列或对角线上。通过深度优先搜索(DFS)和回溯算法,逐行放置皇后并使用数组标记列和对角线的占用情况。关键点包括:使用queens数组记录每行皇后的列位置,通过col、diag1、diag2数组快速检查冲突。当完成所有行处理后,将合法方案转换为棋盘格式加入结果集。时间复杂度为O(N!),空间复杂度为O(N)(不考虑结果集)。该算法高效地剪枝了无效路径,确保找到所有合法解。

2025-07-10 08:00:00 483

原创 [面试精选] 0131. 分割回文串

题目要求将字符串分割为若干回文子串,返回所有可能的分割方案。采用深度优先搜索(DFS)和回溯法,从字符串首字符开始遍历,检查每个子串是否为回文。若是,则加入当前路径并递归处理剩余部分;回溯时移除该子串以尝试其他分割方式。当遍历到字符串末尾时,保存当前路径。判断回文的时间复杂度为O(N),总时间复杂度为O(N * 2^N),空间复杂度为O(N + 2^N)。该算法通过递归和回溯高效枚举所有合法分割方案。

2025-07-10 07:00:00 332

原创 [面试精选] 0079. 单词搜索

要求在给定的二维字符网格中搜索是否存在指定单词。通过深度优先搜索(DFS)和回溯算法,从每个网格位置出发尝试匹配单词字符,使用剪枝优化无效路径。关键步骤包括遍历矩阵、DFS递归搜索四个方向、标记及恢复访问状态。算法时间复杂度为O(MN4^L),空间复杂度为O(L)。该方法高效解决了二维矩阵中的单词匹配问题。

2025-07-09 14:25:17 984

原创 [面试精选] 0022. 括号生成

采用回溯算法,通过递归构建所有可能的组合,并利用约束条件(左括号不超过n,右括号不超过左括号)确保有效性。代码使用字符数组优化效率,避免了频繁字符串拼接。时间复杂度为O(4^n / sqrt(n)),空间复杂度为O(n × 4^n / sqrt(n))。该方法高效地生成了所有合法括号组合,适用于中等规模的输入。

2025-07-09 14:24:17 332

原创 [面试精选] 0039. 组合总和

给定一个无重复元素的整数数组和目标值,要求找出所有和为目标的数字组合,同一数字可重复使用。解题采用回溯算法,通过递归决策选择或不选当前数字,并剪枝优化无效分支。关键点包括固定顺序遍历以避免重复组合,以及回溯时维护当前路径。代码使用深度优先搜索实现,时间复杂度为指数级O(n^(t/m)),空间复杂度为O(t/m)。该解法高效枚举了所有可能组合,适用于小规模输入。

2025-07-09 14:21:39 351

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

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

2025-06-16 08:00:00 542

原创 [面试精选] 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 536

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

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

2025-06-15 08:00:00 436

原创 [面试精选] 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 427

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

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

2025-06-13 08:00:00 373

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

0437. 路径总和 iii

2025-06-13 07:00:00 485

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

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

2025-06-12 08:00:00 1233

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

0114. 二叉树展开为链表

2025-06-12 07:00:00 589

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

0199. 二叉树的右视图

2025-06-11 08:00:00 664

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

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

2025-06-11 07:00:00 540

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

0098. 验证二叉搜索树

2025-06-10 08:00:00 583

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

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

2025-06-10 07:00:00 518

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

0102. 二叉树的层序遍历

2025-06-09 08:00:00 531

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

0543. 二叉树的直径

2025-06-09 07:00:00 732

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

0101. 对称二叉树

2025-06-08 08:00:00 569

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

0226. 翻转二叉树

2025-06-08 07:00:00 357

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

0104. 二叉树的最大深度

2025-06-07 22:07:35 681

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

0094. 二叉树的中序遍历

2025-06-07 22:06:05 654

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

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

2025-06-06 08:00:00 403

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

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

2025-06-06 07:00:00 370

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

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

2025-06-05 08:00:00 722

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

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

2025-06-05 07:00:00 768

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

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

2025-06-04 08:00:00 622

空空如也

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

TA关注的人

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