LC 834. 树中距离之和 题目描述这是 LeetCode 上的 834. 树中距离之和 ,难度为 困难。 给定一个无向、连通的树。 树中有 n 个标记为 0...n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges, $edges[i] = [a{i}, b{i}]$表示树中的节点 $a{i}$ 和 $b{i}$ 之间有一条边。 返回长度为 n 的数组 answer,其中 answer[i] 是树中第 i 2023-09-19 动态规划 DFS 树形 DP 树
LC 96. 不同的二叉搜索树 题目描述这是 LeetCode 上的 96. 不同的二叉搜索树 ,难度为 中等。 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种? 返回满足题意的二叉搜索树的种数。 示例 1:123输入:n = 3输出:5示例 2:123输入:n = 1输出:1 提示: $1 <= n <= 19$ 区间 DP沿用 95. 不同的二叉搜索树 I 2023-09-12 动态规划 数学 树 区间 DP 二叉搜索树 卡特兰数
LC 95. 不同的二叉搜索树 II 题目描述这是 LeetCode 上的 95. 不同的二叉搜索树 II ,难度为 中等。 给你一个整数 n,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。 可以按 任意顺序 返回答案。 示例 1: 123输入:n = 3输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,nul 2023-09-12 DFS BST 递归 树 爆搜 二叉搜索树
LC 109. 有序链表转换二叉搜索树 题目描述这是 LeetCode 上的 109. 有序链表转换二叉搜索树 ,难度为 中等 给定一个单链表的头节点 head,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 $1$。 示例 1: 12345输入: head = [-10,-3,0,5,9]输出: [0,-3,9,-10,null,5]解释: 2023-09-11 中序遍历 二叉树 树的搜索 分治
LC 108. 将有序数组转换为二叉搜索树 题目描述这是 LeetCode 上的 108. 将有序数组转换为二叉搜索树 ,难度为 简单。 给你一个整数数组 nums,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 $1$ 」的二叉树。 示例 1:12345输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5 2023-09-11 二叉树 树的搜索 分治
LC 99. 恢复二叉搜索树 题目描述这是 LeetCode 上的 99. 恢复二叉搜索树 ,难度为 中等。 给你二叉搜索树的根节点 root,该树中的 恰好 两个节点的值被错误地交换。 请在不改变其结构的情况下,恢复这棵树 。 示例 1: 12345输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜 2023-09-07 中序遍历 二叉树 树的搜索 递归 迭代 Morris 遍历
LC 1879. 两个数组最小的异或值之和 题目描述这是 LeetCode 上的 1879. 两个数组最小的异或值之和 ,难度为 困难。 给你两个整数数组 nums1 和 nums2,它们长度都为 n。 两个数组的 异或值之和 为 (nums1[0] XOR nums2[0]) + (nums1[1] XOR nums2[1]) + ... + (nums1[n - 1] XOR nums2[n - 1]) (下标从 0 开始)。 比方说, 2023-08-24 动态规划 启发式搜索 状压 DP
LC 235. 二叉搜索树的最近公共祖先 题目描述这是 LeetCode 上的 235. 二叉搜索树的最近公共祖先 ,难度为 中等。 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8 2023-08-24 DFS 二叉树 递归
LC 236. 二叉树的最近公共祖先 题目描述这是 LeetCode 上的 236. 二叉树的最近公共祖先 ,难度为 中等。 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 示例 1: 12345输入:root = [3,5,1,6,2, 2023-08-24 DFS 二叉树 递归
LC 649. Dota2 参议院 题目描述这是 LeetCode 上的 649. Dota2 参议院 ,难度为 中等。 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)。 Dota2 参议院由来自两派的参议员组成,现在参议院希望对一个 Dota2 游戏里的改变作出决定,他们以一个基于轮为过程的投票进行。 在每一轮中,每一位参议员都可以行使两项权利中的一项: 禁止一名参议员的权利:参议员可以让另一位参议员 2023-08-24 贪心 队列 红黑树 有序集合
LC 76. 最小覆盖子串 题目描述这是 LeetCode 上的 76. 最小覆盖子串 ,难度为 困难。 给你一个字符串 s、一个字符串 t。返回 s 中涵盖 t 所有字符的最小子串。 如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 ""。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 2023-08-12 双指针 滑动窗口
LC 1657. 确定两个字符串是否接近 题目描述这是 LeetCode 上的 1657. 确定两个字符串是否接近 ,难度为 中等。 如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。 例如,abcde -> aecdb 操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。 例如,aacabb -> bbcbaa 2023-08-07 模拟
LC 1268. 搜索推荐系统 题目描述这是 LeetCode 上的 1268. 搜索推荐系统 ,难度为 中等。 给你一个产品数组 products 和一个字符串 searchWord,products 数组中每个产品都是一个字符串。 请你设计一个推荐系统,在依次输入单词 searchWord 的每一个字母后,推荐 products 数组中前缀与 searchWord 相同的最多三个产品。如果前缀相同的可推荐产品超过三个,请按字 2023-08-06 哈希表 二分 字典树 排序
LC 1503. 所有蚂蚁掉下来前的最后一刻 题目描述这是 LeetCode 上的 1503. 所有蚂蚁掉下来前的最后一刻 ,难度为 中等。 有一块木板,长度为 n 个单位。 一些蚂蚁在木板上移动,每只蚂蚁都以每秒一个单位的速度移动。 其中,一部分蚂蚁向左移动,其他蚂蚁向右移动。 当两只向不同方向移动的蚂蚁在某个点相遇时,它们会同时改变移动方向并继续移动。 假设更改方向不会花费任何额外时间。 而当蚂蚁在某一时刻 t 到达木板的一端时,它立即从 2023-07-30 模拟 脑筋急转弯
LC 1802. 有界数组中指定下标处的最大值 题目描述这是 LeetCode 上的 1802. 有界数组中指定下标处的最大值 ,难度为 中等。 给你三个正整数 n、index 和 maxSum。 你需要构造一个同时满足下述所有条件的数组 nums(下标 从 0 开始 计数): nums.length == n nums[i] 是 正整数 ,其中 0 <= i < n abs(nums[i] - nums[i+1]) <= 2023-07-28 模拟 二分 贪心 数学 构造