- 博客(282)
- 资源 (2)
- 收藏
- 关注
原创 [LeetCode]890. 查找和替换模式
890. 查找和替换模式你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)返回 words 中与给定模式匹配的单词列表。你可以按任何顺序返回答案。 示例:输入:words = ["abc","deq
2022-06-12 09:24:03
133
原创 [LeetCode]2222. 选择建筑的方案数
2222. 选择建筑的方案数给你一个下标从 0 开始的二进制字符串 s ,它表示一条街沿途的建筑类型,其中:s[i] = '0' 表示第 i 栋建筑是一栋办公楼,s[i] = '1' 表示第 i 栋建筑是一间餐厅。作为市政厅的官员,你需要随机 选择 3 栋建筑。然而,为了确保多样性,选出来的 3 栋建筑 相邻 的两栋不能是同一类型。比方说,给你 s = "001101" ,我们不能选择第 1 ,3 和 5 栋建筑,因为得到的子序列是 "011" ,有相邻两栋建筑是同一类型,所以 不合 题意。
2022-06-11 20:33:17
132
原创 [LeetCode]926. 将字符串翻转到单调递增
926. 将字符串翻转到单调递增如果一个二进制字符串,是以一些 0(可能没有 0)后面跟着一些 1(也可能没有 1)的形式组成的,那么该字符串是 单调递增 的。给你一个二进制字符串 s,你可以将任何 0 翻转为 1 或者将 1 翻转为 0 。返回使 s 单调递增的最小翻转次数。 示例 1:输入:s = "00110"输出:1解释:翻转最后一位得到 00111.示例 2:输入:s = "010110"输出:2解释:翻转得到 011111,或者是 000111。示例 3:
2022-06-11 12:21:09
1265
原创 向上取整向下取整探讨
先放结论:左边式子表示aaa对b+1b+1b+1向上取整,右边是取整的算法ceil(ab+1)ceil(\cfrac {a} {b+1})ceil(b+1a) = a+bb+1\cfrac {a+b} {b+1}b+1a+b上面两种情况下,都是左边=右边还有一种等价的形式:ceil(ab)ceil(\cfrac {a} {b})ceil(ba) = a+b−1b\cfrac {a+b-1} {b}ba+b−1 即⌈ab⌉⌈\cfrac {a} {b}⌉⌈ba⌉ = a+b−1b\cfrac {a
2022-06-07 19:23:57
11022
1
原创 [LeetCode]478. 在圆内随机生成点
478. 在圆内随机生成点解法方法1:拒绝采样方法2:极坐标ρ= random ∗r极坐标的的角度也是随机的 θ = 2∗π∗randomx = x_center + ρ * cos(θ)y = y_center + ρ * sin(θ)
2022-06-05 09:17:49
161
原创 [LeetCode]450. 删除二叉搜索树中的节点
450. 删除二叉搜索树中的节点解法方法1:递归+分情况讨论当前节点的值比目标值小,说明目标节点在右子树上,删除后的结果挂在当前节点的右孩子上当前节点的值比目标值大,说明目标节点在左子树上,删除后的结果挂在当前节点的左孩子上如果当前节点与目标值相同,说明当前节点为目标节点,要删除当前节点,分为以下三种情况:其无左子树:其右子树顶替其位置,删除了该节点其无右子树:其左子树顶替其位置,删除了该节点其左右子节点都有:其左子树转移到其右子树的最左节点的左子树上,然后右子树顶替其位置,由此删除了该
2022-06-02 08:02:28
245
原创 [LeetCode]899. 有序队列
题目899. 有序队列899. 有序队列给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个,并把它加到字符串的末尾。返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串 。 示例 1:输入:s = "cba", k = 1输出:"acb"解释:在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 “acb”。示例 2:输入:s = "baaca", k
2022-05-31 10:26:41
209
原创 [acwing]158.项链
158.项链static class Main { static Main main = new Main(); public static void main(String[] args) { main.process(); } private void process() { Scanner in = new Scanner(System.in); String a = in.next(), b = in.next
2022-05-31 09:32:08
113
原创 剑指 Offer II 087. 复原 IP
题目剑指 Offer II 087. 复原 IP 剑指 Offer II 087. 复原 IP 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.3
2022-05-31 09:31:06
82
原创 [LeetCode]剑指 Offer II 114. 外星文字典
题目剑指 Offer II 114. 外星文字典剑指 Offer II 114. 外星文字典现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序 排列。若不存在合法字母顺序,返回 "" 。若存在多种可能的合法字母顺序,返回其中 任意一种 顺序即可。字符串 s 字典顺序小于 字符串 t 有两种情况:
2022-05-31 09:23:32
131
原创 [LeetCode]796. 旋转字符串
题目796. 旋转字符串796. 旋转字符串给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。 例如, 若 s = 'abcde',在旋转一次之后结果就是'bcdea' 。 示例 1:输入: s = "abcde", goal = "cdeab"输出: true示例 2:输入: s = "abcde", goal = "abced"输出: false 提示
2022-05-30 23:16:44
193
原创 [LeetCode]1022. 从根到叶的二进制数之和
题目1022. 从根到叶的二进制数之和1022. 从根到叶的二进制数之和给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。返回这些数字之和。题目数据保证答案是一个 32 位 整数。 示例 1:输入:root = [1,0,1
2022-05-30 08:18:37
134
原创 [LeetCode]1368. 使网格图至少有一条有效路径的最小代价
题目1368. 使网格图至少有一条有效路径的最小代价1368. 使网格图至少有一条有效路径的最小代价给你一个 m x n 的网格图 grid 。 grid 中每个格子都有一个数字,对应着从该格子出发下一步走的方向。 grid[i][j] 中的数字可能为以下几种情况:1 ,下一步往右走,也就是你会从 grid[i][j] 走到 grid[i][j + 1]2 ,下一步往左走,也就是你会从 grid[i][j] 走到 grid[i][j - 1]3 ,下一步往下走,也就是你会从 grid[i][j
2022-05-29 20:34:53
243
原创 [LeetCode]6081. 到达角落需要移除障碍物的最小数目
题目6081. 到达角落需要移除障碍物的最小数目6081. 到达角落需要移除障碍物的最小数目给你一个下标从 0 开始的二维整数数组 grid ,数组大小为 m x n 。每个单元格都是两个值之一:0 表示一个 空 单元格,1 表示一个可以移除的 障碍物 。你可以向上、下、左、右移动,从一个空单元格移动到另一个空单元格。现在你需要从左上角 (0, 0) 移动到右下角 (m - 1, n - 1) ,返回需要移除的障碍物的 最小 数目。 示例 1:输入:grid = [[0,1
2022-05-29 20:28:26
466
原创 [LeetCode]1293. 网格中的最短路径
题目1293. 网格中的最短路径1293. 网格中的最短路径给你一个 m * n 的网格,其中每个单元格不是 0(空)就是 1(障碍物)。每一步,您都可以在空白单元格中上、下、左、右移动。如果您 最多 可以消除 k 个障碍物,请找出从左上角 (0, 0) 到右下角 (m-1, n-1) 的最短路径,并返回通过该路径所需的步数。如果找不到这样的路径,则返回 -1 。 示例 1:输入: grid = [[0,0,0],[1,1,0],[0,0,0],[0,1,1],[0,0,0]],
2022-05-29 16:51:42
1295
原创 剑指 Offer II 087. 复原 IP
题目剑指 Offer II 087. 复原 IP 剑指 Offer II 087. 复原 IP 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.3
2022-05-29 09:38:22
186
原创 [LeetCode]468. 验证IP地址
题目468. 验证IP地址468. 验证IP地址给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 "IPv4" ;如果是有效的 IPv6 地址,返回 "IPv6" ;如果不是上述类型的 IP 地址,返回 "Neither" 。有效的IPv4地址 是 “x1.x2.x3.x4” 形式的IP地址。 其中 0 <= xi <= 255 且 xi 不能包含 前导零。例如: “192.168.1.1” 、 “192.168.1.0” 为有效IPv4地址, “192.168.01
2022-05-29 09:09:42
154
原创 [LeetCode]84. 柱状图中最大的矩形
题目84. 柱状图中最大的矩形84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1:输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10示例 2:输入: heights = [2,4]输出: 4 提示:1 <= heights.length <=1050 <= hei
2022-05-28 21:47:19
184
原创 [LeetCode]1856. 子数组最小乘积的最大值
题目1856. 子数组最小乘积的最大值1856. 子数组最小乘积的最大值一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) = 2 * 10 = 20 。给你一个正整数数组 nums ,请你返回 nums 任意 非空子数组 的最小乘积 的 最大值 。由于答案可能很大,请你返回答案对 109 + 7 取余 的结果。请注意,最小乘积的最大值考虑的是取余操作 之前 的结果。题目保证最小乘积的最大值
2022-05-28 19:45:32
265
原创 [LeetCode]739. 每日温度
题目739. 每日温度739. 每日温度给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出: [1,1
2022-05-28 18:11:11
228
原创 [LeetCode]856. 括号的分数
题目856. 括号的分数856. 括号的分数给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。 示例 1:输入: "()"输出: 1示例 2:输入: "(())"输出: 2示例 3:输入: "()()"输出: 2示例 4:输入: "(()(()))"输出: 6 提示:S 是平衡括号字符串,且只含有 ( 和
2022-05-28 11:17:25
276
原创 [LeetCode]402. 移掉 K 位数字
题目402. 移掉 K 位数字402. 移掉 K 位数字给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 :输入:num = "1432219", k = 3输出:"1219"解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。示例 2 :输入:num = "10200", k = 1输出:"200"解释:移掉首位的 1 剩下的数字为 200. 注意
2022-05-27 09:01:13
288
原创 [LeetCode]467. 环绕字符串中唯一的子字符串
题目467. 环绕字符串中唯一的子字符串467. 环绕字符串中唯一的子字符串把字符串 s 看作是 “abcdefghijklmnopqrstuvwxyz” 的无限环绕字符串,所以 s 看起来是这样的:"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd...." . 现在给定另一个字符串 p 。返回 s 中 唯一 的 p 的 非空子串 的数量 。 示例 1:输入: p = "a"输出: 1解释: 字符串 s
2022-05-25 09:09:09
203
原创 [LeetCode]496. 下一个更大元素 I
题目496. 下一个更大元素 I496. 下一个更大元素 Inums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素
2022-05-24 22:53:00
69
原创 [LeetCode]907. 子数组的最小值之和
题目907. 子数组的最小值之和907. 子数组的最小值之和给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。由于答案可能很大,因此 返回答案模 10^9 + 7 。 示例 1:输入:arr = [3,1,2,4]输出:17解释:子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。 最小值为 3,1,2,4,1,1,2,1,1,1,和为 17。示
2022-05-24 09:05:50
294
原创 [LeetCode]2104. 子数组范围和
题目2104. 子数组范围和2104. 子数组范围和给你一个整数数组 nums 。nums 中,子数组的 范围 是子数组中最大元素和最小元素的差值。返回 nums 中 所有 子数组范围的 和 。子数组是数组中一个连续 非空 的元素序列。 示例 1:输入:nums = [1,2,3]输出:4解释:nums 的 6 个子数组如下所示:[1],范围 = 最大 - 最小 = 1 - 1 = 0 [2],范围 = 2 - 2 = 0[3],范围 = 3 - 3 = 0[1,2],
2022-05-24 08:41:14
340
2
原创 [LeetCode]965. 单值二叉树
题目965. 单值二叉树965. 单值二叉树如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false 提示:给定树的节点数范围是 [1, 100]。每个节点的值都是整数,范围为 [0, 99] 。解法方法1:递归public boolean isUniva
2022-05-24 07:15:11
75
原创 [LeetCode]675. 为高尔夫比赛砍树
题目675. 为高尔夫比赛砍树675. 为高尔夫比赛砍树你被请来给一个要举办高尔夫比赛的树林砍树。树林由一个 m x n 的矩阵表示, 在这个矩阵中:0 表示障碍,无法触碰1 表示地面,可以行走比 1 大的数 表示有树的单元格,可以行走,数值表示树的高度每一步,你都可以向上、下、左、右四个方向之一移动一个单位,如果你站的地方有一棵树,那么你可以决定是否要砍倒它。你需要按照树的高度从低向高砍掉所有的树,每砍过一颗树,该单元格的值变为 1(即变为地面)。你将从 (0, 0) 点开始工作,
2022-05-23 08:47:47
179
Grokking the System Design by educative.io (z-lib.org).pdf
2021-08-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅