avatar
文章
101
标签
56
分类
22
首页
归档
标签
分类
关于
很多时候不懂事
搜索
首页
归档
标签
分类
关于

很多时候不懂事

LeetCode39 - 对称二叉树
发表于2026-03-25|算法题练习二叉树|简单•树•深度优先搜索•二叉树•广度优先搜索
📝 题目描述 题目链接:对称二叉树 给你一个二叉树的根节点 root, 检查它是否轴对称。 示例: 示例 1: 12输入:root = [1,2,2,3,4,4,3]输出:true 示例 2: 12输入:root = [1,2,2,null,3,null,3]输出:false 提示: 树中节点数目在范围 [1, 1000] 内 -100 <= Node.val <= 100 💡 解题思路 方法一:递归 判断一棵树是否对称,本质上是判断它的左子树和右子树是否是相互镜像的。 如果同时满足下面的条件,两个树互为镜像: 它们的两个根结点具有相同的值 每个树的右子树都与另一个树的左子树镜像对称 我们可以实现这样一个递归函数,通过“同步移动”两个指针的方法来遍历这棵树。 首先获取根节点的左节点指针 left 和右节点指针 right,然后进入函数,首先比较这两个指针是否相同,然后left->left和right->right进行比较,left->right和right->left进行比较。即这两个指针移动方向相反,随后 left 左移时,r...
LeetCode38 - 翻转二叉树
发表于2026-03-25|算法题练习二叉树|简单•树•深度优先搜索•二叉树•广度优先搜索
📝 题目描述 题目链接:翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例: 示例 1: 12输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] 示例 2: 12输入:root = [2,1,3]输出:[2,3,1] 示例 3: 12输入:root = []输出:[] 提示: 树中节点数目范围在 [0, 100] 内 -100 <= Node.val <= 100 💡 解题思路 方法一:递归 深度优先搜索的思想,前序遍历和后序遍历的思想都可以解答这道题。 方法二:迭代 广度优先搜索,也就是层序遍历的思路。 访问每层的各个节点,然后交换其左右子树的指针。 🔧 代码实现 1、递归 123456789101112131415161718192021222324/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode...
LeetCode37 - 二叉树的最大深度
发表于2026-03-25|算法题练习二叉树|简单•树•深度优先搜索•二叉树•广度优先搜索
📝 题目描述 题目链接:二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例: 示例 1: 12输入:root = [3,9,20,null,null,15,7]输出:3 示例 2: 12输入:root = [1,null,2]输出:2 提示: 树中节点的数量在 [0, 10^4] 区间内 -100 <= Node.val <= 100 💡 解题思路 方法一:深度优先搜索(递归) 深度优先的思路,如果我们知道了左子树和右子树的最大深度 lll 和 rrr,那么该二叉树的最大深度即为: max(l,r)+1max(l,r) + 1 max(l,r)+1 而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用“深度优先搜索”的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1)O(1)O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。 方法二:广度优先搜索(迭代) 广度...
LeetCode36 - 二叉树的中序遍历
发表于2026-03-23|算法题练习二叉树|简单•栈•树•深度优先搜索•二叉树
📝 题目描述 题目链接:二叉树的中序遍历 给定一个二叉树的根节点 root ,返回它的 中序遍历 。 示例: 示例 1: 12输入:root = [1,null,2,3]输出:[1,3,2] 示例 2: 12输入:root = []输出:[] 示例 3: 12输入:root = [1]输出:[1] 提示: 树中节点数目在范围 [0, 100] 内 -100 <= Node.val <= 100 💡 解题思路 方法一:递归 二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,并且在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。 因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。 方法二:迭代 方法一的递归函数我们也可以用迭代的方式实现,两种方式是等价的,区别在于递归的时候隐式地维护了一个栈,而我们在迭代的时候需要显式地将这个栈模拟出来,其他都相同。 ★方法三:Morris 中序遍历 Morris 遍历算法是另一种遍历二叉树的方法,它能将非递归的中序遍历空间复杂度降为 O(1)O(1)O(1)。 M...
LeetCode35 - LRU 缓存
发表于2026-03-23|算法题练习链表|中等•哈希表•链表•设计•双向链表
📝 题目描述 题目链接:LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。 void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。 函数 get 和 put 必须以 O(1)O(1)O(1) 的平均时间复杂度运行。 示例: 1234567891011121314151617输入["LRUCache", "put", "put", "get", "put", "get", &quo...
LeetCode34 - 合并 K 个升序链表
发表于2026-03-23|算法题练习链表|困难•分治•链表•堆(优先队列)•归并排序
📝 题目描述 题目链接:合并 K 个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例: 123456789101112131415161718192021222324示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输出:[]示例 3:输入:lists = [[]]输出:[] 提示: k == lists.length 0 <= k <= 10^4 0 <= lists[i].length <= 500 -10^4 <= lists[i][j] <= 10^4 lists[i] 按 升序 排列 lists[i].length 的总和不超过 10^4 ...
LeetCode33 - 排序链表
发表于2026-03-22|算法题练习链表|中等•排序•分治•双指针•链表•归并排序
📝 题目描述 题目链接:排序链表 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例: 示例 1: 12输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5] 示例 2: 12输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]] 示例 3: 12输入:head = []输出:[] 提示: 链表中节点的数目在范围 [0, 5 * 10^4] 内 -10^5 <= Node.val <= 10^5 💡 解题思路 方法一:使用multimap map的key是天然有序的,不过考虑到数字有可能重复,我们需要使用multimap。 方法二:自顶向下归并排序✅️ 对链表自顶向下归并排序的过程如下。 找到链表的中点,以中点为分界,将链表拆分成两个子链表。寻找链表的中点可以使用快慢指针的做法,快指针每次移动 2 步,慢指针每次移动 1 步,当快指针到达链表末尾时,慢指针指向的链表节点即为链表的中点; 对两个子链表分别排序(左闭右开区间); 将两个排序后的子链表合并,得到完整的排序后的链表。可以使...
LeetCode32 - 随机链表的复制
发表于2026-03-20|算法题练习链表|中等•哈希表•链表
📝 题目描述 题目链接:随机链表的复制 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。 例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。 返回复制链表的头节点。 用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示: val:一个表示 Node.val 的整数。 random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。 你的代码 只 接受原链表的头节点 head 作...
LeetCode31 - K 个一组翻转链表
发表于2026-03-19|算法题练习链表|困难•递归•链表
📝 题目描述 题目链接:K 个一组翻转链表 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 示例: 示例 1: 12输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5] 示例 2: 12输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5] 提示: 链表中的节点数目为 n 1 <= k <= n <= 5000 0 <= Node.val <= 1000 💡 解题思路 方法一:模拟✅️ 首先创建一个哨兵节点,使得第一个子链表的头节点 head 不再特殊化。 我们需要把链表节点按照 k 个一组分组,所以可以使用一个指针 head 依次指向每组的头节点。这个指针每次向前移动 k 步,直至链表结尾。对于每个分组,我们先判断它的长度是否大于等于 k。若是,我们就翻转这部分链表,...
LeetCode30 - 两两交换链表中的节点
发表于2026-03-18|算法题练习链表|中等•递归•链表
📝 题目描述 题目链接:两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例: 示例 1: 12输入:head = [1,2,3,4]输出:[2,1,4,3] 示例 2: 12输入:head = []输出:[] 示例 3: 12输入:head = [1]输出:[1] 提示: 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 💡 解题思路 方法一:递归 可以通过递归的方式实现两两交换链表中的节点。 递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换。 如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。在对链表中的其余节点递归地两两交换之后,更新节点之间的指针关系,即可完成整个链表的两两交换。 用 head 表示原始链表的头节点,新的链表的第二个节点,用 newHea...
1…567…11
avatar
azuki
记录一些琐碎的事物
文章
101
标签
56
分类
22
GitHub
公告
This is my Blog
最新文章
LeetCode85 - 零钱兑换2026-04-26
LeetCode84 - 完全平方数2026-04-25
LeetCode83 - 打家劫舍2026-04-23
LeetCode82 - 杨辉三角2026-04-20
LeetCode81 - 爬楼梯2026-04-20
分类
  • LLM手撕练习1
  • 华厦实习9
  • 生活记录2
  • 算法题练习86
    • 二分查找6
    • 二叉树15
    • 动态规划5
    • 双指针4
标签
发癫生活华厦大语言模型注意力机制面试实习中等数组哈希表前缀和简单困难队列滑动窗口单调队列堆字符串排序分治动态规划数字双指针矩阵模拟数学二分查找栈递归链表初级工程师堆(优先队列)归并排序树深度优先搜索二叉树设计双向链表广度优先搜索二叉搜索树
归档
  • 四月 2026 37
  • 三月 2026 40
  • 二月 2026 6
  • 一月 2026 4
  • 十二月 2025 2
  • 七月 2024 11
  • 六月 2024 1
网站信息
文章数目 :
101
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2024 - 2026 By azuki框架 Hexo 8.1.1|主题 Butterfly 5.5.3
搜索
数据加载中