自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LC.981 | 基于时间的键值存储 | 哈希 | upper_bound快速定位

【代码】LC.981 | 基于时间的键值存储 | 哈希 | upper_bound快速定位。

2026-01-01 21:37:40 170

原创 LC.846 | 一手顺子 | 有序集合| map计数

(它不可能被更小的牌带着走,因为没有更小的了)。,否则后面无论怎么分组它都会卡死。统计每种牌出现次数(

2025-12-28 22:04:39 212

原创 LC.2353 | 设计食物评分系统 | 有序集合 | 负分数排序实现“最高分优先 + 字典序优先”

这样能保证每次修改后,菜系的“冠军”始终在。

2025-12-28 21:59:52 295

原创 LC.855 | 考场就座 | 有序集合 | set的应用

0, n-1]seat()ppseat()seat()leave()用一个有序集合维护当前已坐下的座位编号(自动有序)。

2025-12-28 21:56:39 297

原创 LC.414 | 第三大的数 | 数组 | 一次遍历维护三个最大值(去重)

如果不存在第三大的不同数字,则返回数组中的最大值。整数(第三大或最大值)。(可能包含重复元素)。题眼是“第三大”指的是。

2025-12-23 11:52:15 137

原创 LC.506 | 相对名次 | 哈希 | 排序后映射回原下标(分数唯一)

能减少 rehash,算是工程细节加分。位运动员得分,且所有分数互不相同。位运动员的名次描述。

2025-12-23 11:51:39 98

原创 LC.1382 | 将二叉搜索树变平衡 | 树 | 中序转有序数组 + 分治重建(等价于 LC.108)

这题本质就是把“已经是 BST 但形状很烂”的树,重建成“高度平衡”的形状。,节点值集合与原树完全一致(顺序可变,结构可变)。,再用“取中点当根”的分治法重建平衡 BST。先中序把所有值收集出来得到有序数组。平衡 BST 的根节点。(可能极度不平衡)。

2025-12-23 11:50:53 181

原创 LC.109 | 有序链表转换二叉搜索树 | 树 | 先转数组再分治建树(同 LC.108)

这题和 LC.108(有序数组转 BST)几乎是同一道题,区别只在于:这里给的是。构造出的 BST 根节点。的二叉搜索树(BST)。

2025-12-23 11:50:01 96

原创 LC.108 | 将有序数组转换为二叉搜索树 | 树 | 分治递归取中点

有序数组天生就是“BST 的中序遍历结果”。BST,关键就是让左右子树规模尽量接近。,左右两半分别递归构建左右子树。构造出的 BST 根节点。的二叉搜索树(BST)。

2025-12-23 11:45:17 108

原创 LC.173 | 二叉搜索树迭代器 | 树 | 中序展开/栈模拟

BST 根节点root,构造。实现一个按next()hasNext()按题意实现类方法(

2025-12-22 23:16:12 204

原创 LC.99 | 恢复二叉搜索树 | 树 | 中序遍历找“逆序对”(定位两节点再交换)

一旦有两个节点值被交换,中序序列里就会出现“乱序”,表现为。在不改变树结构的情况下恢复 BST(只允许改节点值)。BST 的中序遍历应该是。所以我们中序遍历时维护。

2025-12-22 23:12:29 133

原创 LC.538 | 把二叉搜索树转换为累加树 | 树 | 逆向中序遍历(右-根-左)

也能用“两次正序中序”做:第一次中序存有序数组并做后缀和映射,第二次再中序回填。但那是 O(N) 额外空间;本题一趟逆向中序就能原地搞定。BST 的中序遍历(左-根-右)是递增序列。访问顺序从大到小,维护一个滚动累加。每个节点的新值 = 原树中所有。(节点值各不相同)。

2025-12-22 23:11:36 136

原创 LC.98 | 验证二叉搜索树 | 树 | 中序遍历单调性

所以我们做一次中序遍历(左-根-右),并维护一个变量。判断该树是否为有效二叉搜索树(BST)。表示“上一个访问到的节点值”。

2025-12-22 23:10:55 103

原创 LC.230 | 二叉搜索树中第 K 小的元素 | 树 | 中序遍历计数

所以“第 k 小” = “中序遍历第 k 个访问到的节点”。中序遍历每访问一个节点就。时当前节点值就是答案。(从 1 开始计数)。

2025-12-22 23:10:01 204

原创 LC.783 | 二叉搜索树节点最小距离 | 树 | 中序遍历有序性

这道题如果是一棵普通的二叉树,我们需要把所有节点值存下来,两两比较,复杂度是 O(N^2)。计算树中任意两个不同节点值之间的最小差值。,我们可以利用其特性将问题极大简化。一个整数,表示最小差值。

2025-12-16 17:36:25 269

原创 LC.669 | 修剪二叉搜索树 | 树 | 递归与重连

可能需要改变树的根节点,修剪后的树必须保持二叉搜索树的相对结构(即:父子关系虽变,但原来的后代如果保留下来了,相对大小关系不变)。修剪该二叉搜索树,使得所有节点的值都在。题目,借着这题来回顾一下递归三要素。修剪好的二叉搜索树的新的根节点。

2025-12-16 17:35:15 311

原创 LC.938 | 二叉搜索树的范围和 | 树 | BST中序遍历

二叉搜索树的根节点root,以及两个整数low和high。计算树中所有值在范围内的节点值之和。一个整数,表示范围和。这道题表面是树的遍历,内里藏着最核心的“降维打击”思维。

2025-12-16 17:34:13 395

原创 LC.235 | 二叉搜索树的最近公共祖先 | 树 | 双解法:路径记录 vs 分岔点

找到这两个节点的最近公共祖先(LCA)。最近公共祖先节点的指针。

2025-12-16 17:33:26 219

原创 从“能跑”到“能读”:Lc.450删除二叉搜索树中的节点 代码重构记录

这次重构没有改变算法的时间复杂度(依然是 0ms),但它改变了代码的生命周期。原始代码:写完即死,难以维护,我自己写自己看都绷不住。重构代码:逻辑清晰,结构稳健,任何人接手捋捋都能看懂。写出计算机能跑的代码只能算是一种本能,而写出让人能读懂,最起码能让未来的自己看懂的代码(难绷),才是真正的本事。以前看到过一句话,好看的武器一定好用。我想好的代码也应该具备这种品质:优雅美丽,高效简洁。

2025-12-16 11:00:16 1091

原创 LC.450 | 删除二叉搜索树中的节点 | 树 | 暴力重构/转化思维

这道题的标准解法通常涉及复杂的指针操作(特别是处理双子节点的情况)。但在实际解题或笔试中,如果我们一时无法理清复杂的指针断连逻辑,可以转换思维,利用。虽然这种方法在空间和时间上不是最优(涉及大量内存分配),但它逻辑极其简单,不易出错,是一种非常实用的“工程化”解题思路——当然这题自然有正规写法,等回头思路清晰了再来写,今天先来个暴力写法开开胃。删除 BST 中的指定节点,并保证二叉搜索树性质不变。删除后的新树根节点。

2025-12-15 15:58:02 250

原创 LC.701 | 二叉搜索树中的插入操作 | 树 | 迭代模拟

在二叉搜索树中插入新节点,其实就是**“一次失败的查找”**。我们要找这个值应该在的位置,直到走到死胡同(空指针),那个位置就是它该待的地方。插入到二叉搜索树中,并保证插入后整棵树仍然满足 BST 的性质(左 < 根 < 右)。如果根节点为空,直接用新值创建一个节点并返回,它就是新的根。,相比递归不仅逻辑直观,而且空间复杂度更优。题目保证新值和原始树中任意节点值都不同。循环遍历树,利用 BST 性质(插入节点后的二叉搜索树的根节点。

2025-12-15 13:25:55 236

原创 LC.700 | 二叉搜索树中的搜索 | 树 | 利用BST有序性

的节点,并返回以该节点为根的子树。如果要找的节点不存在,返回。这使得我们在树上的搜索过程类似于。在 BST 中找到节点值等于。,不需要遍历整棵树。

2025-12-15 13:25:02 105

原创 LC.1008 | 前序遍历构造二叉搜索树 | 树 | 递归遍历

BST 的性质是:对于任意节点,左子树所有节点值 < 当前节点值 < 右子树所有节点值。)或者使用“上限值控制法”来避免数组拷贝,但在逻辑理解上,当前的解法是符合直觉的。根据 BST 的性质,比根节点小的元素属于左子树,比根节点大的元素属于右子树。更优的做法是传递原始数组的索引范围(前序遍历的第一个元素永远是当前子树的根节点。策略,利用了二叉搜索树(BST)的核心性质来切分数据。根据给定的先序遍历还原出二叉搜索树(BST)。,代表二叉搜索树的先序遍历结果。构造出的二叉搜索树的根节点。

2025-12-15 13:24:21 178

原创 LC.297 | 二叉树的序列化与反序列化 | 树 | 定长编码传递信息

本题很有意思,序列化与反序列化,然后全程只有一个字符串传递,之前我们已经做到简单版的问题,这一题一部分难点在于如何用string传递足够多的信息,颇有点计算机的本质了,就是信息的传递。设计一个算法,将二叉树序列化为一个字符串,并且可以将该字符串反序列化为原始的树结构。不限制具体的序列化逻辑(如前序、层序等),只要保证“编码 -> 解码”过程可逆且准确即可。

2025-12-15 13:22:16 374

原创 LC.2196 | 根据描述创建二叉树 | 树 | 哈希映射 + 寻找根节点

因为题目给出的节点描述是无序的(可能先给出叶子节点的父子关系,再给出根节点的),我们需要一个容器来存储已经创建过的节点,防止重复创建。思路:这道题的核心在于两个问题:一是如何快速找到节点并建立连接,二是如何确定谁是“根节点”。要求:根据描述构造二叉树并返回根节点 isLeft == 1 表示左子节点,isLeft == 0 表示右子节点。因此,我们在建树的同时,可以顺便维护一个状态(比如代码中用的。(从未当过儿子)的节点,就是我们要找的 Root。输出:构造出的二叉树的根节点。出现过,就把它标记为。

2025-12-08 17:55:39 167

原创 LC.106 | 从中序与后序遍历序列构造二叉树 | 树 | 递归

思路:这道题是“前序+中序”构造二叉树的姊妹题,逻辑几乎完全一致,只是“定位根节点”的视角变了。输入:两个整数数组 inorder(中序遍历)和 postorder(后序遍历)个就是左子树的后序,后面剩下的就是右子树的后序。同样,在中序序列中,根节点。: 利用中序遍历计算出的左子树长度,去。我们把末尾的根去掉后,剩下的序列前。空间复杂度:O(N^2)的最后一个元素,它就是当前的根。输出:构造出的二叉树的根节点。中,根节点在最前面;中,根节点总是藏在序列的。: 拿着这个根节点的值,去。中切分出对应的部分。

2025-12-08 17:52:27 314

原创 LC.105 | 从前序与中序遍历序列构造二叉树 | 树 | 递归分治

时间复杂度:O(N^2) //使用了vector的拷贝 进阶写法肯定是引用而不是拷贝。空间复杂度:O(N^2) //使用了vector的拷贝 进阶写法肯定是引用而不是拷贝。根据中序遍历中算出的左子树长度,在前序遍历中也能切分出对应的左子树部分(紧跟在根节点后面)。输入:两个整数数组 preorder(前序遍历)和 inorder(中序遍历):既然父节点能这么分,子节点当然也能这么分。,那么我们的递归函数也应当返回当前子树的根节点。序列,就可以递归生成左节点和右节点。输出:构造出的二叉树的根节点。

2025-12-08 17:49:17 155

原创 LC.2415 | 反转二叉树的奇数层 | 树| 两次BFS (记录+回填)

将每一层的节点值收集到一个临时列表 current_layer_vals 中。层(第 1, 3, 5... 层)的节点值 注意:根节点在第 0 层(偶数层),不需要反转。,就从之前准备好的 levels 数组中取出对应的数值进行赋值。,直接在存入大数组 levels 之前,将这个列表进行。思路:很典型的层序遍历题,不用多想,两次遍历稳稳搞定。这样 levels 里存的就是这一层最终该有的顺序。再次按层遍历整棵树。时间复杂度:O(N)空间复杂度:O(N)输出:反转操作后的二叉树根节点。

2025-12-08 17:42:52 152

原创 LC.2471 | 逐层排序二叉树所需的最少操作数目 |树 | BFS + 最小交换次数

能做到(充分性)和不能更少(必要性)。证明 1:充分性(为什么 k-1 次一定能搞定?在环中任选一个位置 i,将其当前持有的数字交换到它原本应该在的位置。效果:这一次交换后,数字回到了正确位置(即退出了环),原本长度为k的环,剩下了k-1个错位元素,形成了一个长度为k-1的新环。推导每做 1 次交换,环的长度就减 1。当执行了k-1次交换后,环的长度变为 1(即只剩最后一个元素),该元素因其他位置已满,必然自动归位。得证:k-1 次交换足以完成任务。证明 2:必要性(为什么不可能更少?初始状态。

2025-12-08 17:36:13 226

原创 LC.637 | 二叉树的层平均值 | 树 | 层序遍历

要求:返回一个数组,表示每一层所有节点值的平均数(double)。思路:层序遍历,外加每层遍历的时候求下平均值即可。)难度给到中等,这题还加了点反而只给了简单。时间复杂度:O(n)空间复杂度:O(n)不过有意思的是,单纯的层序遍历题(,包含从上到下每一层的平均值。输入:一棵二叉树的根节点。

2025-12-02 23:44:37 131

原创 LC.199 | 二叉树的右视图 | 树 | 层序遍历

要求:二叉树的右侧看过去,按从上到下的顺序,返回每一层“能看到的节点值”。输出:一个 vector<int>,按层从上往下,记录每层的最右节点。时间复杂度:O(n)空间复杂度:O(n)输入:给定一棵二叉树的根节点。

2025-12-02 23:41:14 151

原创 LC.662 | 二叉树最大宽度 | 树 | 层序遍历

把真实二叉树当成一棵“隐式完全二叉树”,这样做的好处是不需要真的补全 null 节点,但能够模拟完整结构,从而正确计算每一层的最左、最右逻辑位置。宽度定义为:在同一层中,最左非空节点和最右非空节点之间的(逻辑)节点数量。时间复杂度:O(n)空间复杂度:O(n)输出:一个整数,表示最大宽度。输入:一棵二叉树的根节点。要求:返回这棵二叉树的。:该层最后一个节点的编号。一层一层更新最大值即可。root 的编号是 1。:该层第一个节点的编号。

2025-12-02 23:38:00 107

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

依次将当前层节点弹出、存进结果,再把下一层节点推入队列。要求:返回从上到下、从左到右的层序遍历结果。本层的大小由队列当前 size 决定。时间复杂度:O(n)空间复杂度:O(n)层序遍历思路非常固定。

2025-11-24 15:28:59 191

原创 从 sort 到 priority_queue:C++ 标准对 Lambda 支持的完整演进

在刷 LeetCode 时,遇到一个问题,我想用 Lambda 表达式自定义排序。用在 std::sort 上,一行代码搞定,丝滑流畅;用在 std::priority_queue 上,直接报错,查了查,学着用 decltype(cmp) 解决问题。为什么会有这种巨大的差异?带着这个疑问,本文将深入底层,彻底揭开sort、Lambda 与decltype之间错综复杂的“猫腻”。特性 / 版本C++98/03C++11C++17自定义排序工具struct仿函数Lambda表达式Lambda。

2025-11-24 14:09:47 1293

原创 基于范围的 for 循环 (Range-based for) 原理与实践

只读遍历 (Read-only)首选零拷贝,高性能,且防止误修改。需要修改元素 (Write/Modify)首选理由:通过引用直接操作原数据。基础类型简单遍历对于intcharbool等微小类型,写在性能上无明显差异,但在模板编程或泛型代码中,依然建议保持的习惯。特定限制需要下标 -> 用...)需要删改容器结构 -> 用。

2025-11-24 11:14:37 895

原创 std::pair 使用指南

std::pair 是 C++ 标准库里最简单、出镜率又极高的“小工具类型”之一。不仅是“存两个数”的结构体,也常联动STL 各大容器使用,也是算法中状态记录的神器。本文旨在梳理 std::pair 的基础用法,并重点剖析它和 map / vector / stack / queue / priority_queue 等容器之间的深度联动。

2025-11-24 10:39:55 955

原创 LC.2331 | 计算布尔二叉树的值 | 树 | 递归遍历

时间复杂度:O(n)空间复杂度:O(h)要求:返回整棵树的布尔运算结果。输出:true / false。如果是叶子节点,直接返回。输入:一棵“布尔二叉树”先算出左右子树的布尔值。

2025-11-24 09:40:34 100

原创 LC.563 | 二叉树的坡度 | 树 | 递归遍历(子树和 + 全局累加)

整棵树的坡度 = 所有节点的坡度之和。时间复杂度:O(n)空间复杂度:O(h)要求:返回整棵树的总坡度。

2025-11-21 23:17:20 184

原创 LC.543 | 二叉树的直径 | 树 | DFS(深度 + 全局最长路径)

思路:实际上是每个节点都有一个左右子树深度,左树深+右树深最长的那个,就是题目要求的最长直径。可以先去做另外一题,求树的长度,再来做这题,思路就更清晰了。要求:返回二叉树的直径(任意两个节点之间的最长路径长度)输出:一个整数,表示最长路径的“边数”时间复杂度:O(n)空间复杂度:O(h)

2025-11-21 23:15:23 221

原创 LC.572 | 另一棵树的子树 | 树 | 递归遍历

时间复杂度:O(n × m) n 为 root 的节点数,m 为 subRoot 节点数。的根值相同,就可能成为子树的入口。空间复杂度:O(h)输出:true / false。

2025-11-21 23:11:54 185

空空如也

空空如也

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

TA关注的人

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