自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 记VsCode与Ubntu22.04远程连接报错ssh: connect to host 192.168.64.128 port 22: Permission denied的解决

先确保主机与虚拟机是否能ping通,若主机端不能ping通,虚拟机能ping通,优先查找Vmware的网络适配器是否存在,点击更改适配器设置,应该有如下图标若不存在,可能是因为之前卸载VMware时,注册表没有清理干净,我卸载的时候是用的geek,依结果来看,没有卸载干净以上操作完成后,会出现适配器的图标,也可以ping通。

2025-07-21 00:01:58 397

原创 感觉最浪漫的一道题-160.相交链表

走到尽头见不到你,于是走过你来时的路,等到相遇才发现,你也走过我来时的路。

2025-06-08 16:55:17 84

原创 198. 打家劫舍

打家劫舍问题是一个经典的动态规划问题。题目描述如下:假设你是一个专业的小偷,计划抢劫一条街上的房屋。唯一的限制是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚被闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。从最后一个房子或第一个房子开始递归(受到的约束小),如果选当前房子就是下一步就是前i - 2个房子能获得的最大价值,如果不选就是前i-1个房子能获得的最大价值。时间复杂度:O(n)空间复杂度:O(n)

2025-06-02 16:54:40 406

原创 322. 零钱兑换

采用记忆化搜索方法,将问题转化为完全背包模型,即使用无限数量的物品来凑出目标金额amount。时间复杂度:O(n*amount)空间复杂度:O(n*amount)

2025-06-02 16:26:38 455

原创 2928. 给小朋友们分糖果 II ——O(1)数学公式

两个小朋友同时超过limit的情况(集合A∩B,B∩C,C∩A): 已分配2*(limit+1)个糖果,剩余n-2*(limit+1)个 每种情况方案数:C(n-2*(limit+1)+2, 2)三个小朋友同时超过limit的情况(集合A∩B∩C): 已分配3*(limit+1)个糖果,剩余n-3*(limit+1)个 方案数:C(n-3*(limit+1)+2, 2)总方案数(不考虑limit限制): 将n个小球分配给3个不同盒子 相当于在n+2个位置中选择2个位置放置隔板 公式:C(n+2, 2)

2025-06-02 15:27:43 477

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

假设给你一个字符串“aab”,如何在树中存储,可以实现在判断是否存在前缀或者完全匹配呢,这样就能高效实现前缀遍历查找功能。

2025-05-31 16:03:09 278

原创 22. 括号生成

给定需要生成的括号对数n,要求生成所有合法的括号组合,即左右括号必须正确匹配(遵循编程语言的语法规则)。解题思路:采用选择与不选的策略。

2025-05-31 15:46:55 411

原创 79. 单词搜索-极致优化,可行性剪枝和顺序剪枝

例如,board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"时间复杂度:O(mn3^4),m和n为行列数,对于每个入口最多有三个分支(因为上一个点已经搜索了一个方向),所以为O(mn3^4)给你一个目标字符串,和一个二维字符数组,判断在数组中是否能找到目标字符串。以每个单元格作为搜索起点,使用深度优先搜索(DFS)寻找可能匹配目标单词的路径。空间复杂度:O(1)

2025-05-31 15:27:22 970

原创 131. 分割回文串-两种回溯思路

如果将问题分解,可以表示为分割长度为n-1的子字符串,这与原问题性质相同,因此可以采用递归方法解决。在解决这个问题时,我们首先从短字符串开始构建(递的过程),当构造到最长字符串时,需要尝试其他方案(归的过程,即回溯)。时间复杂度:O(n*2^n),递归次数为逗号的子集的个数,也就是2^n,在判断是否是会回文需要O(n)时间所以,总时间为O(n2^n)我们以子串的结束位置j为基准,将当前回文子串加入候选路径,然后递归处理从j+1到n-1位置的剩余字符串分割问题。思路二,答案的视角(枚举子串的结束位置)

2025-05-31 14:56:53 299

原创 763. 划分字母区间

空间复杂度:O(26)时间复杂度:O(n)

2025-05-30 13:36:38 241

原创 207. 课程表

无法完成课程学习的情况: 当课程间存在循环依赖关系时,例如[0,1],[1,2],[2,0],会导致无法确定学习顺序(学习0需要1,1需要2,而2又需要0),形成死锁状态。我们需要判断是否能完成所有指定课程的学习,其中numCourses表示课程总数,prerequisites表示先修关系(例如[0,1]表示学习课程0前需先完成课程1)。能完成课程学习的情况: 当课程的先修关系可以形成有效的拓扑排序时,例如[0,1],[1,2],[2,3],学习顺序必须为3→2→1→0,这样就能顺利完成所有课程。

2025-05-30 13:14:29 292

原创 45. 跳跃游戏 II

题目给定一个数组,每个元素表示该位置能向后跳跃的最大步数(例如 nums[i] = j 表示从下标 i 最多可以跳到 i + j)。要求计算从数组起始位置到达末尾(下标 n-1)所需的最少跳跃次数。解题思路采用贪心算法:在当前可到达范围内,尽可能延迟跳跃。时间复杂度:O(n)空间复杂度:O(1)

2025-05-29 19:10:05 296

原创 14. 最长公共前缀

时间复杂度:O(mn),m为strs中最短单词的长度,n为s0长度。空间复杂度:O(1)

2025-05-29 17:27:59 238

原创 数据库与缓存数据不一致的解决方法

图片来自小林coding

2025-05-28 16:50:36 491

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

仅通过二分值与最后一个元素的比较无法确定其与目标值的位置关系,因此还需额外比较目标值与最后一个元素的大小,以确定目标值所在的递增区间。在二分查找的标准场景中,数组通常保持单调递增,我们只需比较中间值与目标值的大小关系即可。解决这个问题的关键思路是:通过分析中间值与目标值的相对位置来调整二分区间。当中间值和目标值位于同一递增区间时,就可以像二分的标准场景一样,比较中间值与目标值的大小关系解决问题。注:若对为何要比较中间值与末尾元素的逻辑有疑问的同学,可以参考以下说明。空间复杂度:O(1)

2025-05-28 16:44:21 226

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

通过不断二分缩小范围,最终循环结束时指向的元素即为最小值,返回其下标即可。本题要求在旋转排序数组中寻找最小值。输入:nums = [3,4,5,1,2] 输出:1。时间复杂度:O(logn)空间复杂度:O(1)

2025-05-28 16:23:07 342

原创 295.数据流的中位数

中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。先来看中位数的定义,提取一下关键词,中位数将一组按照顺序排序好的数据,分成两部分,例如 1 2 3 4 5 6,中位数 3.5 将数据分成了[1,2,3]和[4,5,6],想看定义的同学可以自行阅读。插入的元素较大:新元素放入 right 中,此时 right 的长度比 left 大,需要将 right 的最小值(堆顶)放入 left ,然后 right 弹出堆顶。

2025-05-26 20:36:42 1378

原创 2131. 连接两字母单词得到的最长回文串

题目描述:给定一个由双字母字符串组成的数组,求用这些单词能组成的最长回文串长度。我们需要通过分类讨论来解决这个问题。最后还需考虑是否存在奇数个xx型单词,因为可以将其放在回文串中心。xy型单词: 累加 xy 和 yx 中出现次数较少者的两倍。空间复杂度:O(26^2)时间复杂度:O(n)

2025-05-26 17:51:11 210

原创 451场周赛 3560.木材运输的最小成本

时间空间复杂度:O(1)本题考查的是数学推导。注意数据为long long。

2025-05-25 15:51:51 111

原创 第451场周赛 3561. 移除相邻字符

处理字符串时,若遇到相邻的连续字符,可将其移除。该方法通过栈结构高效地实现了相邻连续字符的检测与移除。时间空间复杂度都是O(n)

2025-05-25 15:44:48 239

原创 39.组合总和

组合总和问题要求:给定一个数组,计算出所有能使数组元素之和等于目标值(targetSum)的子集组合。剪枝优化:对数组排序,如果targetSum 小于当前元素,后面元素只会更大,不能满足targetSum为0,提前结束递归。类似,区别在于需要在所有可能的子集中筛选出符合要求的组合。

2025-05-25 14:31:50 228

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

在树结构中,祖先指的是一个节点的父节点或更高层级的父节点。公共祖先是指同时为节点p和q的祖先的节点。最近公共祖先(LCA)则是指在所有公共祖先中,距离p和q最近的那个节点。情况2和3:如果当前节点是p或q,直接返回当前节点。因为若当前节点是p,而q是其子节点,则p就是LCA(节点可以是自身的LCA)。若q不在p的子树中,则无需继续在p的子树中搜索。因为如果LCA在左子树,则不会是q的祖先;情况4.3和4.4可以合并处理:若p和q都在右子树,则递归搜索右子树;情况1:空节点不可能是p和q的LCA。

2025-05-24 18:53:38 303

原创 437. 路径总和 III

路径和等于targetSum的条件可以表示为:root1.val + root2.val + ... + rootn.val = targetSum。我们可以将其转化为前缀和问题,即si + sj = targetSum。题目要求计算二叉树中路径和等于targetSum的路径数量。不同,这里的路径起点和终点不必是根节点或叶子节点,这与。时间复杂度:O(n),n为节点个数。空间复杂度:O(n)

2025-05-24 13:48:18 351

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

首先,前序遍历的顺序是根-左-右,因此前序数组的第一个元素必定是二叉树的根节点。由于中序遍历的顺序是左-根-右,根节点左侧的所有元素都属于左子树,右侧的所有元素则属于右子树。时间复杂度:O(n^2),n为preorder的长度,最坏时,二叉树为一条链,需要递归n次,花费O(n)时间,每次查找位置,和复制数组花费O(n)时间,所以是O(n^2)空间复杂度:O(n^2),最坏时,递归需要O(n)次,每次递归会借助4个临时数组,空间为2*(n-1),2(n-2).....0,每次O(n)空间。

2025-05-23 14:46:57 168

原创 199.二叉树的右视图

为了获得二叉树的右视图,可以采用深度优先遍历(DFS)的方法。具体步骤如下:首先遍历右子树,确保在首次到达某一深度时,最先访问到的是最右侧的节点。然后遍历左子树,当首次到达某一深度时,该节点即为右视图可见的节点。空间复杂度:O(h),h为树的高度,最坏情况,树退化成一条链,空间复杂度为O(n)想象你站在二叉树的右侧,你能看见的就是二叉树的右视图。时间复杂度:O(n),n为节点个数。

2025-05-23 12:00:02 164

原创 84.柱状图中最大的矩形

为了简化代码逻辑,我们可以引入两个哨兵节点:首先在栈中预先放入-1,对应left[i] = -1,这样既避免了空栈判断,又能在栈中仅剩一个元素(哨兵除外)时,将左边界设为-1,表示该元素可以向左延伸到最左侧;其次,在heights数组末尾添加一个-1,这样当原数组遍历完成后,栈中还有剩余元素,这些元素也要参与矩形的运算,可以强制清空栈中剩余元素,确保所有可能的矩形面积都被计算,避免遗漏。中某个更高的柱子,此时矩形的宽度不变,高度增加,面积将更大,这与假设矛盾。,该柱子为矩形的高度,左边最近小于。

2025-05-22 16:45:05 980

原创 146.LRU缓存-图解LRU

图片来自B站灵茶山艾符

2025-05-22 13:23:45 1161

原创 55. 跳跃游戏

具体实现如下:遍历数组时,实时更新全局最远可达距离。若当前下标超出全局最远可达距离,说明无法到达该位置,返回 false;若成功遍历完数组且未出现上述情况,则说明可以到达最后一个下标,返回 true。在跳跃游戏中,判断能否到达最后一个下标的关键在于计算每个位置的最远可达距离。对于数组中的每个下标 i,其最远可达距离为 i + nums[i]。或者你也可以理解为如果最右可达大于等于最后一个下标,说明可以到达。时间复杂度:O(n),n为数组长度。空间复杂度:O(1)

2025-05-19 12:22:59 471

原创 230. 二叉搜索树中第 K 小的元素

要找出二叉搜索树中第K小的元素,可以利用二叉搜索树的性质:左子树的值小于根节点,右子树的值大于根节点。因此,对二叉树进行中序遍历即可得到从小到大的有序序列。具体实现时,在中序遍历过程中,每当访问根节点时,将K减1,当K减至0时,当前节点即为所求的第K小元素。时间复杂度:O(n),n为二叉树节点数。空间复杂度:O(h),h为树的高度。

2025-05-19 11:26:06 319

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

采用头插法时,若要在6前插入5,5前插入4,依此类推,最终得到6、5、4、3、2、1的顺序,可按照以下步骤操作:首先遍历右子树,然后遍历左子树,将左子树置空。接着,使用头插法将根节点插入到链表头部,即执行。题目要求将一个二叉树展开为单链表,展开顺序遵循先序遍历。空间复杂度:O(n),递归需要O(n)栈空间。在下次头插前,需将当前根节点更新为新的链表头节点。时间复杂度:O(n),n为树的节点数。

2025-05-19 11:08:14 270

原创 98. 验证二叉搜索树

在判断一棵树是否为二叉搜索树时,我们可以先分别判断其子树是否符合二叉搜索树的定义。根据二叉搜索树的性质,可以通过节点值的大小关系进行判断:首先检查左子树,然后比较当前节点值与前一节点值,最后检查右子树。2的取值范围为(-∞, 5],4的取值范围为[2, 5]。特别需要注意的是,整棵树的根节点5没有父节点,因此其取值范围为(-∞, +∞)。这种先访问节点值,再递归遍历左右子树的遍历方式称为前序遍历。该图表明,当前根节点的取值范围由其父节点或祖父节点的取值决定。空间复杂度:O(n),最坏情况下,树退化成链。

2025-05-17 16:03:42 419

原创 543.二叉树的直径

例如在第二棵树中,路径在节点2处拐弯,得到以2为根节点的最长路径长度为3,即左子树最长链 + 右子树最长链 + 2(根节点与两个子树之间的边)。以节点2为例,在返回时,我们将2-3-4这条左右子树中最长的链返回给节点5,即max(左子树最长链,右子树最长链) + 1。回顾之前做过的求深度的题目,我们发现二叉树的左右子树与自身结构相似,这自然地将问题分解为子问题,因此适合采用递归方法解决,那么二叉树的深度与直径是否存在某种联系呢?空间复杂度:O(n),在最坏情况下,二叉树为一条链,需要O(n)栈空间。

2025-05-17 15:16:15 335

原创 101. 对称二叉树

在递归过程中,终止条件为:当左右子树中任意一个节点为空时,需要判断另一个节点是否也为空。与100题不同,对称二叉树要求镜像对称,因此需要比较左子树的左子树与右子树的右子树是否相等,以及左子树的右子树与右子树的左子树是否相等。对于这棵二叉树,由于根节点本身已经对称,问题就转化为判断其左右子树是否相同,即节点 2 和节点 2 的对称性。本题适合采用递归方法解决,因为可以将问题分解为相同的子问题,且子问题与原问题的处理逻辑完全一致。空间复杂度:O(n),最坏的情况下,树是一条链,需要O(n)的递归栈空间。

2025-05-16 19:21:02 380

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

具体过程如下:首先将根节点3入队,然后遍历队列,将当前节点值存入临时数组(用于记录每层结果)。接着将节点3的左右子树依次入队,最后将节点3出队。重复上述过程,直到队列为空,即可得到完整的层序遍历结果。其遍历方式与广度优先搜索(BFS)相似,遵循"先进先出"的原则,即先被访问的节点先被处理。由于这种特性与队列的数据结构完全吻合,因此通常采用队列来实现层序遍历。空间复杂度:O(n),最坏情况下二叉树是满二叉树,将最后一层所有的节点放入临时数组。时间复杂度:O(n),所有节点最多遍历一次。

2025-05-16 19:10:22 288

原创 2089. 找出数组排序后的目标下标——O(n)做法!

采用二分查找法:首先确定大于等于目标值的最小索引,再找出小于等于目标值的最大索引,这两个索引之间的范围即为等于目标值的区间。空间复杂度:O(1)统计小于和等于目标值的方法:通过。的元素位置),这两个位置的交集即为所有等于。时间复杂度:O(nlogn)记录等于目标值的元素数量。若不存在这样的元素,则返回。的元素位置)和上界(即最后一个小于等于。表示第二个目标值的下标,依此类推,直到。时间复杂度:O(n)空间复杂度:O(1)的下界(即第一个大于等于。记录小于目标值的元素数量,表示第一个目标值的下标,

2025-05-15 13:05:12 193

原创 34. 在排序数组中查找元素的第一个和最后一个位置——边界问题不清楚?结果不知道是left还是right?四种大小关系不会转化?一篇文章告诉你!

二分查找的核心在于两个循环不变量:L-1位置的元素始终小于target,R+1位置的元素始终大于target。理解这一点至关重要,的第一个和最后一个元素,时间复杂度为 O(n)。然而,这种方法并未利用数组有序的特性。由此可见,这四种情况都可以通过lower_bound函数及其变体来实现,体现了二分查找的通用性和灵活性。,要求找出目标值在数组中的起始和结束位置。题目要求的开始位置和结束位置说的就是大于等于和小于等于。时间复杂度:O(logn),每次询问都去掉了一半的元素。最直观的方法是遍历数组,找到等于。

2025-05-15 12:24:54 273

原创 300. 最长递增子序列

需要注意的是,子序列的元素在原数组中不一定是连续的。因此,最长递增子序列就是在所有可能的递增子序列中,找出长度最长的那个。理解最长递增子序列(LIS)是解决该问题的关键。子序列是从给定数组中按顺序选取的元素序列,例如数组。此外,由于最长递增子序列可能以任意元素结尾,因此在计算过程中需要维护。每个元素本身就是一个长度为 1 的递增子序列,因此。时间复杂度:O(n^2)个元素为结尾的最长递增子序列的长度。空间复杂度:O(n)根据递增的定义,如果当前元素。数组的最大值作为最终结果。的初始值应设为 1。

2025-05-14 19:10:35 231

原创 64. 最小路径和

由于只能向右或向下移动,当前状态 dp[i][j] 可以由上方状态 dp[i-1][j] 和左方状态 dp[i][j-1] 转移而来。最小路径和问题要求在一个包含非负整数的 m x n 网格中,找到一条从左上角到右下角的路径,使得路径上的数字总和最小。因此,状态转移方程为: dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]: dp[i][j] 表示从起点 (0,0) 到 (i,j) 的所有路径中的最小数字和。类似,这也是一道典型的动态规划问题。

2025-05-14 17:29:43 219

原创 62. 不同路径

在不同的路径问题中,给定一个矩阵的长度和宽度,要求计算从起点 (1,1) 到终点 (m,n) 的所有可能路径数量。移动方式仅限于向下或向右,这是一道典型的多维动态规划问题。此外,需要注意的是,第一行和第一列由于只有一种移动方式,因此这些位置的方案数均为 1,需要先进行初始化。:由于移动方式只有两种,当前状态可以由上方或左方的状态转移而来,即。空间复杂度:O(mn),存储了矩阵中所有位置的状态。时间复杂度:O(mn),m,n为长度和宽度。表示从起点走到 (i,j) 点的方案数。

2025-05-14 16:56:05 142

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

时间复杂度:O(n*4^n),n为digits长度,每个数字最多对应4个字母,树高为n,叶子节点树为4^n,每个节点需要O(n)时间构造字符串,共O(n*4^n)通过分析样例可以发现,结果类似于笛卡尔积,即全排列。由于输入数组的长度不固定,因此采用搜索与回溯的方法进行求解。空间复杂度:O(n),递归最多n次,栈需要O(n),temp长度O(n),返回所有它能表示的字母组合(数字到字母的映射与电话按键相同)。

2025-05-14 16:28:41 241

空空如也

空空如也

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

TA关注的人

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