LC 593. 有效的正方形 题目描述这是 LeetCode 上的 593. 有效的正方形 ,难度为 中等。 给定 2D 空间中四个点的坐标 a, b, c 和 d,如果这四个点构成一个正方形,则返回 true 。 点的坐标表示为 $[x_i, y_i]$ ,输入不是按任何顺序给出的。 一个有效的正方形有四条等边和四个等角(90度角)。 示例 1:123输入: a = [0,0], b = [1,1], c = [1,0], 2022-07-29 模拟 数学 计算几何
LC 1331. 数组序号转换 题目描述这是 LeetCode 上的 1331. 数组序号转换 ,难度为 简单。 给你一个整数数组 arr,请你将数组中的每个元素替换为它们排序后的序号。 序号代表了一个元素有多大。序号编号的规则如下: 序号从 $1$ 开始编号。 一个元素越大,那么序号越大。如果两个元素相等,那么它们的序号相同。 每个数字的序号都应该尽可能地小。 示例 1:12345输入:arr = [40,10,20,30 2022-07-28 哈希表 模拟 排序
LC 592. 分数加减运算 题目描述这是 LeetCode 上的 592. 分数加减运算 ,难度为 中等。 给定一个表示分数加减运算的字符串 expression,你需要返回一个字符串形式的计算结果。 这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 $2$,你需要将它转换成分数形式,其分母为 $1$。所以在上述例子中, $2$ 应该被转换为 2/1。 示例 1:123输入: expression 2022-07-27 模拟 表达式计算
LC 1206. 设计跳表 题目描述这是 LeetCode 上的 1206. 设计跳表 ,难度为 困难。 不使用任何库函数,设计一个跳表。 跳表 是在 $O(\log{n})$ 时间内完成增加、删除、搜索操作的数据结构。 跳表相比于树堆与红黑树,其功能与性能相当,并且跳表的代码长度相较下更短,其设计思想与链表相似。 例如,一个跳表包含 [30, 40, 50, 60, 70, 90],然后增加 80、45 到跳表中,以下图的 2022-07-26 链表 数据结构
LC 919. 完全二叉树插入器 题目描述这是 LeetCode 上的 919. 完全二叉树插入器 ,难度为 中等。 完全二叉树 是每一层(除最后一层外)都是完全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。 设计一种算法,将一个新节点插入到一个完整的二叉树中,并在插入后保持其完整。 实现 CBTInserter 类: CBTInserter(TreeNode root) 使用头节点为 root 的给定树初始 2022-07-25 模拟 BFS 树的遍历
LC 1184. 公交站间的距离 题目描述这是 LeetCode 上的 1184. 公交站间的距离 ,难度为 简单。 环形公交路线上有 $n$ 个站,按次序从 $0$ 到 $n - 1$ 进行编号。我们已知每一对相邻公交站之间的距离,$distance[i]$ 表示编号为 $i$ 的车站和编号为 (i + 1) % n 的车站之间的距离。 环线上的公交车都可以按顺时针和逆时针的方向行驶。 返回乘客从出发点 start 到目的地 d 2022-07-24 模拟
LC 757. 设置交集大小至少为2 题目描述这是 LeetCode 上的 757. 设置交集大小至少为2 ,难度为 困难。 一个整数区间 $[a, b]$ ($a < b$) 代表着从 a 到 b 的所有连续整数,包括 a 和 b。 给你一组整数区间 intervals,请找到一个最小的集合 S,使得 S 里的元素与区间 intervals 中的每一个整数区间都至少有 $2$ 个元素相交。 输出这个最小集合 S 的大小。 示 2022-07-22 贪心
LC 814. 二叉树剪枝 题目描述这是 LeetCode 上的 814. 二叉树剪枝 ,难度为 中等。 给你二叉树的根结点 root,此外树的每个结点的值要么是 $0$ ,要么是 $1$ 。 返回移除了所有不包含 $1$ 的子树的原二叉树。 节点 node 的子树为 node 本身加上所有 node 的后代。 示例 1:123456输入:root = [1,null,0,0,1]输出:[1,null,0,null,1]解释 2022-07-21 DFS 二叉树 递归
LC 1260. 二维网格迁移 题目描述这是 LeetCode 上的 1260. 二维网格迁移 ,难度为 简单。 给你一个 m 行 n 列的二维网格 grid 和一个整数 k。 你需要将 grid 迁移 k 次。 每次「迁移」操作将会引发下述活动: 位于 grid[i][j] 的元素将会移动到 grid[i][j + 1] 位于 grid[i][n - 1] 的元素将会移动到 grid[i + 1][0] 位于 grid[m 2022-07-20 模拟 构造
LC 731. 我的日程安排表 II 题目描述这是 LeetCode 上的 731. 我的日程安排表 II ,难度为 中等。 实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内不会导致三重预订时,则可以存储这个新的日程安排。 MyCalendar 有一个 book(int start, int end) 方法。它意味着在 start 到 end 时间内增加一个日程安排,注意,这里的时间是半开区间,即 $[star 2022-07-19 线段树 线段树(动态开点)
LC 749. 隔离病毒 题目描述这是 LeetCode 上的 749. 隔离病毒 ,难度为 困难。 病毒扩散得很快,现在你的任务是尽可能地通过安装防火墙来隔离病毒。 假设世界由 $m \times n$ 的二维矩阵 isInfected 组成,isInfected[i][j] == 0 表示该区域未感染病毒,而 isInfected[i][j] == 1 表示该区域已感染病毒。可以在任意 $2$ 个相邻单元之间的共享边 2022-07-18 模拟 BFS 图论搜索
LC 565. 数组嵌套 题目描述这是 LeetCode 上的 565. 数组嵌套 ,难度为 中等。 索引从 $0$ 开始长度为 N 的数组 A,包含 $0$ 到 $N - 1$ 的所有整数。找到最大的集合 S 并返回其大小,其中 $S[i] = {A[i], A[A[i]], A[A[A[i]]], … }$ 且遵守以下的规则。 假设选择索引为 i 的元素 $A[i]$ 为 S 的第一个元素,S 的下一个元素应该是 $A 2022-07-17 模拟
LC 剑指 Offer II 041. 滑动窗口的平均值 题目描述这是 LeetCode 上的 剑指 Offer II 041. 滑动窗口的平均值 ,难度为 简单。 给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算滑动窗口里所有数字的平均值。 实现 MovingAverage 类: MovingAverage(int size) 用窗口大小 size 初始化对象。 double next(int val) 成员函数 next 每次调用的时候 2022-07-16 模拟 队列
LC 558. 四叉树交集 题目描述这是 LeetCode 上的 558. 四叉树交集 ,难度为 中等。 二进制矩阵中的所有元素不是 $0$ 就是 $1$ 。 给你两个四叉树,quadTree1 和 quadTree2。 其中 quadTree1 表示一个 $n \times n$ 二进制矩阵,而 quadTree2 表示另一个 $n \times n$ 二进制矩阵。 请你返回一个表示 $n \times n$ 二进制矩阵的 2022-07-15 递归
LC 745. 前缀和后缀搜索 题目描述这是 LeetCode 上的 745. 前缀和后缀搜索 ,难度为 困难。 设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词。 实现 WordFilter 类: WordFilter(string[] words) 使用词典中的单词 words 初始化对象。 f(string pref, string suff) 返回词典中具有前缀 prefix 和后缀 suff 的单词的下 2022-07-14 字典树