自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DavidXu的笔记

记录 IT 技术开发经验和学习心得:)

  • 博客(191)
  • 资源 (2)
  • 收藏
  • 关注

原创 【LeetCode 热题100道笔记】数据流的中位数

中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。例如 arr = [2,3,4] 的中位数是 3 。例如 arr = [2,3] 的中位数是 (2 + 3) / 2 = 2.5 。实现 MedianFinder 类:MedianFinder() 初始化 MedianFinder 对象。void addNum(int num) 将数据流中的整数 num 添加到数据结构中。double findMedian() 返回到目前为止所有元素的中位数。与实际答案相差

2025-09-08 15:22:21 631

原创 【LeetCode 热题100道笔记】数组中的第K个最大元素

该算法通过"剪枝"避免了对无关区间的处理,相比全排序(O(n log n))更高效,尤其适合大规模数据。利用快速排序的分治思想,无需完全排序数组,通过分区操作定位第k大元素,平均时间复杂度可达O(n)。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。输入: [3,2,3,1,2,4,5,5,6], k = 4。输入: [3,2,1,5,6,4], k = 2。

2025-09-08 15:15:02 295

原创 【LeetCode 热题100道笔记】柱状图中最大的矩形

算法,核心思想是:对于每个柱子,找到其左侧和右侧第一个高度小于它的柱子,以当前柱子高度为矩形高度,两侧边界距离为宽度,计算面积并更新最大值。通过单调栈可高效确定每个柱子的左右边界,避免暴力枚举过高的时间开销。给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。输入:heights = [2,1,5,6,2,3]求在该柱状图中,能够勾勒出来的矩形的最大面积。解释:最大的矩形为图中红色区域,面积为 10。输入: heights = [2,4]

2025-09-08 14:40:05 283

原创 【LeetCode 热题100道笔记】寻找两个正序数组的中位数

采用二分查找法,通过在较短数组上划分左右两部分,找到两个数组的“分割线”,使得分割线左侧的所有元素均小于等于右侧的所有元素。该方法时间复杂度为O(log(min(m,n))),满足O(log(m+n))的要求。请你找出并返回这两个正序数组的 中位数。解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。输入:nums1 = [1,2], nums2 = [3,4]输入:nums1 = [1,3], nums2 = [2]解释:合并数组 = [1,2,3] ,中位数 2。

2025-09-08 14:30:02 758

原创 【LeetCode热题100道笔记】环形链表 II

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。采用Floyd判圈算法(快慢指针法),通过两个阶段高效定位链表的入环节点:首先用快慢指针判断链表是否有环,若有环则利用数学特性找到环的入口节点。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。解释:链表中有一个环,其尾部连接到第二个节点。解释:链表中有一个环,其尾部连接到第一个节点。解释:链表中没有环。

2025-09-08 14:21:00 903

原创 【LeetCode 热题100道笔记】寻找重复数

基于“鸽巢原理”(n+1个元素放入n个“鸽巢”,必存在重复),先通过排序将相同元素聚集,再遍历数组找到连续相等的元素,该元素即为唯一重复值。此方法无需修改原数组(排序会生成临时空间,而非修改输入数组本身),且额外空间仅为排序所需的常数级(取决于排序实现,本题代码满足O(1)额外空间要求),但时间复杂度受排序影响。,映射必然会形成环形环(重复值是环的入口,被多个索引指向)。给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。

2025-09-08 12:00:51 712

原创 【LeetCode 热题100道笔记】下一个排列

如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1]。而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。类似地,arr = [2,3,1] 的下一个排列是 [3,1,2]。例如,arr = [1,2,3] 的下一个排列是 [1,3,2]。输出:[1,3,2]

2025-09-08 10:16:47 528

原创 【LeetCode 热题100道笔记】多数元素

这是满足“时间复杂度O(n)、空间复杂度O(1)”的最优方案。核心逻辑基于“多数元素出现次数>⌊n/2⌋”的特性:通过“计数抵消”机制,让不同元素两两抵消,最终未被抵消且剩余的元素必然是多数元素(因多数元素数量超过一半,无法被其他元素完全抵消)。给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。输入:nums = [2,2,1,1,1,2,2]

2025-09-08 09:39:47 294

原创 【LeetCode 热题100道笔记】只出现一次的数字

解决问题,这是满足“线性时间复杂度(O(n))”和“常量额外空间(O(1))”的最优方案。核心逻辑是:异或运算对相同数字计算结果为0,对0和单个数字计算结果为该数字,通过将数组中所有元素依次异或,最终结果即为只出现一次的元素。给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。除了某个元素只出现一次以外,其余每个元素均出现两次。输入:nums = [4,1,2,1,2]输入:nums = [2,2,1]输入:nums = [1]

2025-09-08 09:21:27 292

原创 【LeetCode 热题100道笔记】编辑距离

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1 = “intention”, word2 = “execution”输出:5解释:in

2025-09-07 19:18:10 341

原创 【LeetCode 热题100道笔记】 最长公共子序列

核心逻辑是:若两个字符串的当前字符相等,说明该字符可构成公共子序列的一部分,其长度为“前一个字符位置的公共子序列长度+1”;若字符不相等,则当前公共子序列长度取“忽略第一个字符串当前字符的长度”与“忽略第二个字符串当前字符的长度”中的较大值,以此逐步计算出最长公共子序列的长度。给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。解释:两个字符串没有公共子序列,返回 0。

2025-09-07 19:13:27 357

原创 【LeetCode 热题100道笔记】 最长回文子串

采用中心扩展法的思路:回文子串具有中心对称的特性,可通过遍历每个可能的中心(包括单个字符和两个相同字符),向两侧扩展检查最长的回文子串。这种方法避免了暴力枚举所有子串的高时间开销,更高效地找到最长回文子串。,其核心思路是:从最长可能的子串长度开始,依次检查所有可能的子串是否为回文,一旦找到第一个回文子串就直接返回(因为是从最长开始检查的)。从最长可能的子串长度开始,依次检查所有可能的子串是否为回文,一旦找到第一个回文子串就直接返回(因为是从最长开始检查的)。解释:“aba” 同样是符合题意的答案。

2025-09-07 19:08:17 246

原创 【LeetCode 热题100道笔记】最小路径和

采用动态规划(DP)思想:由于机器人仅能向右或向下移动,到达网格中某位置的最小路径和,取决于“从上方位置到达此处的路径和”与“从左方位置到达此处的路径和”中的较小值,再加上当前位置的数字。给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输入:grid = [[1,2,3],[4,5,6]]解释:因为路径 1→3→1→1→1 的总和最小。

2025-09-07 18:57:11 304

原创 【LeetCode 热题100道笔记】不同路径

采用动态规划(DP)思想:由于机器人只能向右或向下移动,到达网格中某一位置的路径数等于到达其正上方位置的路径数加上到达其正左方位置的路径数之和。通过构建二维DP表存储每个位置的路径数,可高效计算出从起点到终点的所有不同路径。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。从左上角开始,总共有 3 条路径可以到达右下角。输入:m = 3, n = 7。输入:m = 3, n = 2。输入:m = 7, n = 3。输入:m = 3, n = 3。

2025-09-07 18:51:20 321

原创 【LeetCode热题100道笔记】最长有效括号

利用栈追踪括号的位置信息,通过记录未匹配右括号的位置作为参考点,计算有效括号子串的长度。栈底始终保存最后一个未匹配右括号的索引,当遇到匹配的括号时,通过当前索引与栈顶索引的差值计算有效子串长度,从而找到最长有效括号子串。给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号 子串 的长度。左右括号匹配,即每个左括号都有对应的右括号将其闭合的字符串是格式正确的,比如 “(()())”。解释:最长有效括号子串是 “()()”输入:s = “)()())”输入:s = “(()”

2025-09-07 18:45:24 161

原创 【LeetCode热题100道笔记】从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输入: preorder = [-1], inorder = [-1]输出: [3,9,20,null,null,15,7]preorder 和 inorder 均 无重复 元素。,通过数组切片获取子序列,递归构造左右子树。

2025-09-07 09:18:36 584

原创 【LeetCode刷题笔记】岛屿数量

深度优先搜索(DFS)的核心思路是:遍历网格中的每个单元格,当遇到未访问的陆地(‘1’)时,启动一次深度优先搜索,递归探索所有与之相连的陆地并标记为已访问,每完成一次这样的搜索就代表发现了一个岛屿。广度优先搜索(BFS)的核心思路是:当发现未访问的陆地时,使用队列存储当前岛屿的所有单元格,逐层向外扩展探索所有相连的陆地并标记为已访问。给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。grid[i][j] 的值为 ‘0’ 或 ‘1’输入:grid = [

2025-09-07 09:15:46 858

原创 【LeetCode热题100道笔记】划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 “ababcc” 能够被分为 [“abab”, “cc”],但类似 [“aba”, “bcc”] 或 [“ab”, “ab”, “cc”] 的划分是非法的。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。示例 1:输入:s = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “aba

2025-09-07 09:04:28 317

原创 【LeetCode热题100道笔记】有效的括号

利用栈的先进后出特性验证括号有效性:遍历字符串时,遇到左括号则入栈;遇到右括号时,检查栈顶是否为对应的左括号,若是则弹出栈顶(表示匹配成功),否则判定为无效。最终若栈为空,说明所有括号都能正确匹配。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。每个右括号都有一个对应的相同类型的左括号。左括号必须用相同类型的右括号闭合。输入:s = “()[]{}”输入:s = “([])”输入:s = “([)]”输入:s = “()”输入:s = “(]”

2025-09-07 09:03:46 354

原创 【LeetCode热题100道笔记】最小栈

维护两个栈,一个栈实现原生的栈先进后出功能,另一个最小栈的栈顶始终存储最小值。每次压栈操作时如果最小栈栈顶元素小于当前元素就弹出到另一个辅助栈中直到栈为空或当前元素小于栈顶元素就压栈,再把辅助栈中的所有元素出栈再压入最小栈中。优化:minStack每次在普通栈压入新元素时都压入当前元素位置对应的最小值,不需要维护一个单调栈。普通栈弹出时minstack也同步弹出,栈顶元素还是普通栈中剩余元素的最小值。设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。--> 返回 -3.

2025-09-07 09:02:15 256

原创 【LeetCode热题100道笔记】字符串解码

利用栈的先进后出特性处理嵌套的括号结构:遇到右括号时,从栈中弹出最近的左括号及其之间的子串,同时提取前面的数字作为重复次数,将子串按次数重复后重新压入栈中。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。输入:s = “2[abc]3[cd]ef”输入:s = “abc3[cd]xyz”输入:s = “3[a]2[bc]”输入:s = “3[a2[c]]”输出:“aaabcbc”

2025-09-07 09:00:40 361

原创 【LeetCode刷题笔记】跳跃游戏 II

贪心算法的核心是:在每次跳跃前,选择当前可跳跃范围内能够到达的最远位置作为下一次跳跃的终点。关键在于:不是每次都跳当前位置的最大距离,而是在当前可及范围内选择能延伸到最远的位置作为下次跳跃的起点,这样能最大化后续的选择空间,从而保证全局最优解。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。初始位置在下标 0。输入: nums = [2,3,1,1,4]解释: 跳到最后一个位置的最小跳跃数是 2。输入: nums = [2,3,0,1,4]

2025-09-07 08:57:18 179

原创 【LeetCode刷题笔记】每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。使用单调递减栈存储每个温度值的索引,遇到大于栈顶索引对应的温度值就更新栈顶索引的下一个更大温度值天数。输入: temperatures = [73,74,75,71,69,72,76,73]输入: temperatures = [30,40,50,60]输出: [1,1,4,2,1,1,0,0]输出: [1,1,1,0]输出: [1,1,0]

2025-09-07 08:54:43 150

原创 【LeetCode 刷题笔记】寻找旋转排序数组中的最小值

通过二分查找,可利用数组特性:以最后一个元素为参照,若中间元素小于最后一个元素,说明最小元素在左侧;已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。输入:nums = [4,5,6,7,0,1,2]输入:nums = [3,4,5,1,2]

2025-09-07 08:49:28 373

原创 【LeetCode热题100道笔记】课程表

拓扑排序,设置入度表记录每个课程节点的入度,每次删除入度为0的节点,然后更新其它相关节点的入度值,当前集合中所有节点都删除了表述课程可以完成,如果存在入度不为0的节点,表示无法完成课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。输入:numCourses = 2, prerequisites = [[1,0],[0,1]]例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。学习课程 1 之前,你需要完成课程 0。

2025-09-06 19:37:33 405

原创 【LeetCode热题100道笔记】腐烂的橘子

将所有初始腐烂的橘子视为“同一层级的起点”,通过 BFS 同时向四周扩散,每扩散一层代表经过 1 分钟。利用 BFS 层级遍历的特性,确保记录的扩散时间是“最短时间”,同时避免重复处理,最终高效判断是否所有新鲜橘子都能被腐烂。该算法通过逐分钟迭代的方式,确保了同一时间点所有腐烂橘子的扩散是同步进行的,符合题目中"每分钟腐烂橘子周围的新鲜橘子同时腐烂"的要求。输入:grid = [[2,1,1],[1,1,0],[0,1,1]]输入:grid = [[2,1,1],[0,1,1],[1,0,1]]

2025-09-06 19:37:05 958

原创 【LeetCode热题100道笔记】二叉树的最近公共祖先

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。解释:节点 5 和节点 1 的最近公共祖先是节点 3。:O(n),n为二叉树节点总数。

2025-09-06 19:35:43 681

原创 【LeetCode热题100道笔记】路径总和 III

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

2025-09-06 19:31:43 248

原创 【LeetCode热题100道笔记】二叉树中的最大路径和

递归计算每个子树的最长路径,注意分类讨论不能遗漏:根节点本身是最大路径和、左子树最大路径和不包含根节点、左子树最大路径和包含根节点、右子树最大路径和不包含根节点、右子树最大路径和包含根节点、最大路径和跨越左右子树和根节点。解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。输入:root = [-10,9,20,null,null,15,7]路径和 是路径中各节点值的总和。

2025-09-06 19:21:02 711

原创 【LeetCode热题100道笔记】二叉树展开为链表

题目要求展开后的链表顺序与前序遍历一致(根→左→右),前序遍历的递归顺序天然匹配这一需求:先处理根节点,再处理左子树,最后处理右子树,确保重组后的指针顺序正确。:先将左、右子树分别展开为链表,再将左子树链表接到根节点的右指针,最后将原右子树链表接到左子树链表的尾部,实现“根→左子树链表→右子树链表”的前序顺序。输出:[1,null,2,null,3,null,4,null,5,null,6]输入:root = [1,2,5,3,4,null,6]展开后的链表要求所有节点的左指针为。输入:root = []

2025-09-06 19:15:47 698

原创 【LeetCode热题100道笔记】二叉搜索树中第 K 小的元素

动态筛选“当前遍历到的最小k个元素”:堆顶始终是这k个元素中的最大值,遍历完成后堆顶即为第k小元素(因比堆顶小的元素有k-1个,堆顶自然是第k小)。给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。注:JavaScript无内置堆,需实现简易最大堆(按值大小排序,堆顶为最大值)。输入:root = [5,3,6,2,4,null,null,1], k = 3。输入:root = [3,1,4,null,2], k = 1。

2025-09-06 19:12:57 705

原创 【LeetCode热题100道笔记】二叉树的右视图

层次遍历(BFS)的优势是“按层处理”,天然适合“取层尾节点”的需求,代码逻辑直观,无需维护深度参数;按左→右收集是层次遍历的常规习惯,且无需额外调整顺序——队列中当前层的最后一个元素,就是该层从右往左看的第一个可见节点。,遍历每层时直接提取最后一个节点的值加入结果——因层次遍历按“左→右”顺序收集下一层节点,层尾节点天然是该层最右侧节点,无需额外判断。输入:root = [1,2,3,4,null,null,null,5]输入:root = [1,2,3,null,5,null,4]输出:[1,3,4]

2025-09-06 19:09:53 838

原创 【LeetCode热题100道笔记】验证二叉搜索树

左子节点的区间上限更新为父节点值(需严格小于父节点),右子节点的区间下限更新为父节点值(需严格大于父节点),递归验证所有节点是否在合法区间内。二叉搜索树的根节点的值大于所有左子树的节点,小于所有右子树的节点。节点41 小于祖先节点42,不满足二叉搜索树根节点右子树所有节点大于根节点值条件。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。解释:根节点的值是 5 ,但是右子节点的值是 4。节点的左子树只包含 严格小于 当前节点的数。节点的右子树只包含 严格大于 当前节点的数。

2025-09-06 19:06:58 1035

原创 【LeetCode热题100道笔记】将有序数组转换为二叉搜索树

每次取数组中间元素作为当前根节点,将数组分为“左子数组”(根左侧元素)和“右子数组”(根右侧元素),分别递归构建左、右子树——左子数组构建左子树(值均小于根),右子数组构建右子树(值均大于根),最终形成平衡BST。升序数组的中间元素可将数组分为“长度相等或差1”的左右子数组,递归构建的左右子树高度差≤1,天然满足“平衡”要求;同时,左子数组元素均小于中间元素、右子数组均大于中间元素,满足BST的数值特性。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]

2025-09-06 18:59:34 876

原创 【LeetCode热题100道笔记】二叉树的层序遍历

指针记录已处理的节点位置,计算当前层节点数,直接在原队列中遍历当前层、添加下一层节点,避免临时数组开销。给你二叉树的根节点 root ,返回其节点值的 层序遍历。维护当前层节点,每次遍历完当前层所有节点后,收集下一层节点,循环直至队列为空。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]基础实现中,每次收集下一层节点需创建临时数组。树中节点数目在范围 [0, 2000] 内。输入:root = [1]输入:root = []

2025-09-06 18:55:55 478

原创 【LeetCode热题100道笔记】二叉树的直径

将二叉树直径拆解为“左子树内部直径”“右子树内部直径”“跨当前根节点的直径”三类,递归计算后取最大值。:在计算子树深度的同时,同步更新全局最大直径(跨当前节点的直径=左深度+右深度),实现“一次遍历,双重用途”。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。重复遍历节点(如计算父节点直径时,会重复计算子节点的深度)。输入:root = [1,2,3,4,5]:取三类直径中的最大值,作为当前树的直径。

2025-09-06 18:53:10 584

原创 【LeetCode热题100道笔记】对称二叉树

通过“相向双指针”验证当前层是否对称,再按“镜像顺序”(右子节点先入队、左子节点后入队)存储下一层节点,本质是。核心是定义「镜像检查函数」,递归验证左右子树的对应节点是否满足镜像条件,本质是。输入:root = [1,2,2,null,3,null,3]给你一个二叉树的根节点 root , 检查它是否轴对称。输入:root = [1,2,2,3,4,4,3]进阶:你可以运用递归和迭代两种方法解决这个问题吗?树中节点数目在范围 [1, 1000] 内。

2025-09-06 18:48:26 367

原创 【LeetCode热题100道笔记】排序链表

无需递归栈,从最小有序单元(单个节点)开始,按“子链表长度翻倍”的规则,逐层合并相邻子链表,最终得到完整有序链表。:用快慢指针找链表中点,将链表递归拆分为左右两个子链表,直到子链表仅含1个节点(天然有序);再递归合并两个有序子链表,最终得到完整有序链表。给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。输入:head = [-1,5,3,4,0]输入:head = [4,2,1,3]输出:[-1,0,3,4,5]输出:[1,2,3,4]输入:head = [],满足题目进阶要求。

2025-09-06 18:41:19 967

原创 【LeetCode热题100道笔记】翻转二叉树

从整棵树视角看,该过程是从叶子节点向根节点“自下而上”完成所有节点的左右子树交换,最终返回翻转后的根节点,实现整棵树的镜像翻转。空间复杂度:O(h),h为二叉树高度,递归调用栈深度取决于树的高度,最坏情况(链状树)为O(n),平均情况为O(log n)时间复杂度:O(n),其中n是二叉树节点总数,每个节点仅被访问一次。输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]输入:root = [2,1,3]输入:root = []输出:[2,3,1]

2025-09-06 14:53:46 270

原创 【LeetCode热题100道笔记】二叉树的最大深度

广度优先搜索以“层”为单位遍历二叉树,而二叉树的“层数”恰好等于其“最大深度”(根节点为第1层,子节点为第2层,以此类推)。该思路通过“自下而上”的回溯,将整棵树的深度问题拆解为子树的深度问题,符合深度优先搜索“深入子节点再回溯”的核心逻辑。该思路通过“自上而下”的层序遍历,直接将“深度”转化为“层数”,无需递归,适合处理深度较大的树(避免栈溢出)。二叉树的“最大深度”定义为从根节点到最远叶子节点的最长路径上的节点数。输入:root = [3,9,20,null,null,15,7]

2025-09-05 10:32:29 269

java连接sqlserver2008驱动包jar

java使用jdbc连接sql servel 2008所用驱动包

2014-06-19

嵌入式C++语言精华文章集锦

嵌入式C++语言精华文章集锦 详细生动解析c++的嵌入式开发的经验和过程环节

2013-10-16

空空如也

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

TA关注的人

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