LC 324. 摆动排序 II 题目描述这是 LeetCode 上的 324. 摆动排序 II ,难度为 中等。 给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。 你可以假设所有输入数组都可以得到满足题目要求的结果。 示例 1:12345输入:nums = [1,5,1,1,6,4]输出:[1,6,1,5,1,4]解释:[1, 2022-06-28 排序 构造 快速选择
LC 522. 最长特殊序列 II 题目描述这是 LeetCode 上的 522. 最长特殊序列 II ,难度为 中等。 给定字符串列表 strs,返回其中 最长的特殊序列 。如果最长特殊序列不存在,返回 $-1$ 。 特殊序列 定义如下:该序列为某字符串 独有的子序列(即不能是其他字符串的子序列)。 s 的 子序列可以通过删去字符串 s 中的某些字符实现。 例如,"abc" 是 "aebdc&quo 2022-06-27 动态规划 序列 DP 枚举 最长公共子序列 LCS
LC 710. 黑名单中的随机数 题目描述这是 LeetCode 上的 710. 黑名单中的随机数 ,难度为 困难。 给定一个整数 n 和一个 无重复 黑名单整数数组 blacklist。 设计一种算法,从 $[0, n - 1]$ 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。任何在上述范围内且不在黑名单 blacklist 中的整数都应该有 同等的可能性 被返回。 优化你的算法,使它最小化调用语言 内 2022-06-26 哈希表 二分 前缀和 随机化 离散化
LC 207. 课程表 题目描述这是 LeetCode 上的 207. 课程表 ,难度为 中等。 你这个学期必须选修 numCourses 门课程,记为 $0$ 到 $numCourses - 1$ 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 $prerequisites[i] = [a_i, b_i]$ ,表示如果要学习课程 $a_i$ 则 必须 先学习课程 $b 2022-06-25 拓扑排序 图论
LC 515. 在每个树行中找最大值 题目描述这是 LeetCode 上的 515. 在每个树行中找最大值 ,难度为 中等。 给定一棵二叉树的根节点 root,请找出该二叉树中每一层的最大值。 示例1:123输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]示例2:123输入: root = [1,2,3]输出: [1,3] 提示: 二叉树的节点个数的范围是 $[0,10^4]$ $-2^{31} &l 2022-06-24 DFS BFS
LC 30. 串联所有单词的子串 题目描述这是 LeetCode 上的 30. 串联所有单词的子串 ,难度为 困难。 给定一个字符串 s 和一些长度相同的单词 words。 找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。 注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。 示例 1:123456789输入:s = "barfoothefo 2022-06-23 哈希表 滑动窗口 枚举
LC 513. 找树左下角的值 题目描述这是 LeetCode 上的 513. 找树左下角的值 ,难度为 中等。 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1:123输入: root = [2,1,3]输出: 1示例 2:123输入: [1,2,3,4,null,5,6,null,null,7]输出: 7 提示: 二叉树的节点个数的范围是 $[1,10 2022-06-22 DFS BFS 树的遍历
LC 1537. 最大得分 题目描述这是 LeetCode 上的 1537. 最大得分 ,难度为 困难。 你有两个 有序 且数组内元素互不相同的数组 nums1 和 nums2 。 一条 合法路径 定义如下: 选择数组 nums1 或者 nums2 开始遍历(从下标 $0$ 处开始)。 从左到右遍历当前数组。 如果你遇到了 nums1 和 nums2 中都存在的值,那么你可以切换路径到另一个数组对应数字处继续遍历(但在合法 2022-06-21 动态规划 序列 DP 双指针 前缀和 构造
LC 1108. IP 地址无效化 题目描述这是 LeetCode 上的 1108. IP 地址无效化 ,难度为简单。 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."。 示例 1:123输入:address = "1.1.1.1"输出:"1[.]1[.]1[.] 2022-06-21 模拟
LC 715. Range 模块 题目描述这是 LeetCode 上的 715. Range 模块 ,难度为 困难。 Range 模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 $[left, right)$ 表示所有 $left <= x < right$ 的实数 x 。 实现 RangeModule 类: RangeModule() 初始化数据结构的对象。 void 2022-06-20 线段树 线段树(动态开点)
LC 508. 出现次数最多的子树元素和 题目描述这是 LeetCode 上的 508. 出现次数最多的子树元素和 ,难度为 中等。 给你一个二叉树的根结点 root,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。 一个结点的 「子树元素和」 定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。 示例 1:123输入: root = [5,2,-3]输出: [2,- 2022-06-19 哈希表 DFS 树的遍历
LC 1395. 统计作战单位数 题目描述这是 LeetCode 上的 1395. 统计作战单位数 ,难度为 中等。 n 名士兵站成一排。每个士兵都有一个 独一无二 的评分 rating 。 每 $3$ 个士兵可以组成一个作战单位,分组规则如下: 从队伍中选出下标分别为 i、j、k 的 $3$ 名士兵,他们的评分分别为 $rating[i]$、$rating[j]$、$rating[k]$ 作战单位需满足: $rating[ 2022-06-18 容斥原理 树状数组
LC 剑指 Offer II 029. 排序的循环链表 题目描述这是 LeetCode 上的 剑指 Offer II 029. 排序的循环链表 ,难度为 中等。 给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素 insertVal,使这个列表仍然是循环升序的。 给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。 如果有多个满足条件的插入位置,可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序。 2022-06-18 模拟 链表
LC 1089. 复写零 题目描述这是 LeetCode 上的 1089. 复写零 ,难度为 简单。 给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。 要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。 示例 1:12345输入:[1,0,2,3,0,4,5,0]输出:null解释:调用函数后,输入的数组将被修改 2022-06-17 双指针
LC 532. 数组中的 k-diff 数对 题目描述这是 LeetCode 上的 532. 数组中的 k-diff 数对 ,难度为 中等。 给定一个整数数组和一个整数 $k$,你需要在数组里找到 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。 这里将 k-diff 数对定义为一个整数对 $(nums[i], nums[j])$,并满足下述全部条件: 0 <= i < j < nums.length 2022-06-16 哈希表 双指针 二分 离散化