LC 438. 找到字符串中所有字母异位词 题目描述这是 LeetCode 上的 438. 找到字符串中所有字母异位词 ,难度为 中等。 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1:1234567输入: s = "cbaebabacd", p = "abc" 2021-11-28 双指针 滑动窗口
LC 519. 随机翻转矩阵 题目描述这是 LeetCode 上的 519. 随机翻转矩阵 ,难度为 中等。 给你一个 $m x n$ 的二元矩阵 $matrix$,且所有值被初始化为 $0$。 请你设计一个算法,随机选取一个满足 matrix[i][j] == 0 的下标 $(i, j)$ ,并将它的值变为 $1$ 。 所有满足 matrix[i][j] == 0 的下标 $(i, j)$ 被选取的概率应当均等。 尽量最少调 2021-11-27 哈希表 双指针
LC 700. 二叉搜索树中的搜索 题目描述这是 LeetCode 上的 700. 二叉搜索树中的搜索 ,难度为 简单。 给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。 例如,123456789给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树 2021-11-25 树的搜索 递归 迭代
LC 458. 可怜的小猪 题目描述这是 LeetCode 上的 458. 可怜的小猪 ,难度为 困难。 有 buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。 为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有 minutesToTest 分钟时间来确定哪桶液体是有毒的。 喂猪的规则如下: 选择若干活猪进行喂养 可以允许小猪同时饮用任意数量 2021-11-24 数学
LC 423. 从英文中重建数字 题目描述这是 LeetCode 上的 423. 从英文中重建数字 ,难度为 中等。 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。 示例 1:123输入:s = "owoztneoer"输出:"012"示例 2:123输入:s = "fviefuro"输出:"45&qu 2021-11-23 模拟 脑筋急转弯
LC 859. 亲密字符串 题目描述这是 LeetCode 上的 859. 亲密字符串 ,难度为 简单。 给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。 交换字母的定义是:取两个下标 i 和 j (下标从 $0$ 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。 例如,在 "abcd&q 2021-11-22 模拟
LC 384. 打乱数组 题目描述这是 LeetCode 上的 384. 打乱数组 ,难度为 中等。 给你一个整数数组 nums,设计算法来打乱一个没有重复元素的数组。 实现 Solution class: Solution(int[] nums) 使用整数数组 nums 初始化对象 int[] reset() 重设数组到它的初始状态并返回 int[] shuffle() 返回数组随机打乱后的结果 示例:1234567 2021-11-21 洗牌算法
LC 559. N 叉树的最大深度 题目描述这是 LeetCode 上的 559. N 叉树的最大深度 ,难度为 简单。 给定一个 N 叉树,找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。 示例 1:123输入:root = [1,null,3,2,4,null,5,6]输出:3示例 2:123输入:root = [1,null,2 2021-11-21 DFS BFS
LC 594. 最长和谐子序列 题目描述这是 LeetCode 上的 594. 最长和谐子序列 ,难度为 简单。 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 $1$。 现在,给你一个整数数组 $nums$ ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。 示例 1:12345输入:nums = [1 2021-11-19 哈希表 模拟 双指针 滑动窗口
LC 397. 整数替换 题目描述这是 LeetCode 上的 397. 整数替换 ,难度为 中等。 给定一个正整数 n ,你可以做如下操作: 如果 n 是偶数,则用 n / 2 替换 n 。 如果 n 是奇数,则可以用 n + 1 或 n - 1 替换 n 。 n 变为 $1$ 所需的最小替换次数是多少? 示例 1:12345输入:n = 8输出:3解释:8 -> 4 -> 2 -> 1示例 2 2021-11-19 贪心 DFS BFS
LC 563. 二叉树的坡度 题目描述这是 LeetCode 上的 563. 二叉树的坡度 ,难度为 简单。 给定一个二叉树,计算整个树的坡度 。 一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。 如果没有左子树的话,左子树的节点之和为 $0$ ;没有右子树的话也是一样。空结点的坡度是 $0$ 。 整个树 的坡度就是其所有节点的坡度之和。 示例 1:123456789输入:root = 2021-11-17 DFS 二叉树
LC 318. 最大单词长度乘积 题目描述这是 LeetCode 上的 318. 最大单词长度乘积 ,难度为 中等。 给定一个字符串数组 words,找到 $length(word[i]) * length(word[j])$ 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 $0$。 示例 1:12345输入: ["abcw","baz&qu 2021-11-16 哈希表 模拟 位运算
LC 391. 完美矩形 题目描述这是 LeetCode 上的 391. 完美矩形 ,难度为 困难。 给你一个数组 rectangles,其中 $rectangles[i] = [x_i, y_i, a_i, b_i]$ 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 $(x_i, y_i)$ ,右上顶点是 $(a_i, b_i)$ 。 如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。 2021-11-15 扫描线
LC 319. 灯泡开关 题目描述这是 LeetCode 上的 319. 灯泡开关 ,难度为 中等。 初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。 第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。 第 i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。 找出并返回 n 轮后有多少个亮着的灯泡。 示 2021-11-14 数学
LC 677. 键值映射 题目描述这是 LeetCode 上的 677. 键值映射 ,难度为 中等。 实现一个 MapSum 类,支持两个方法,insert 和 sum: MapSum() 初始化 MapSum 对象 void insert(String key, int val) 插入 key-val 键值对,字符串表示键 key ,整数表示值 val 。如果键 key 已经存在,那么原来的键值对将被替代成新的键值对。 2021-11-13 哈希表 DFS 字典树