Leetcode-cn.com 2022-05-26
🔴 699.falling-squares
🏷️ Tags
#segment_tree #array #ordered_set
Description
在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块。
第
每个方块的底部边缘平行于数轴(即 x 轴),并且从一个比目前所有的落地方块更高的高度掉落而下。在上一个方块结束掉落,并保持静止后,才开始掉落新方块。
方块的底边具有非常大的粘性,并将保持固定在它们所接触的任何长度表面上(无论是数轴还是其他方块)。邻接掉落的边不会过早地粘合在一起,
Example
🔴 699.falling-squares
🏷️ Tags
#segment_tree #array #ordered_set
Description
在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块。
第
i 个掉落的方块(positions[i] = (left, side_length))是正方形,其中 left 表示该方块最左边的点位置(positions[i][0]),side_length 表示该方块的边长(positions[i][1])。每个方块的底部边缘平行于数轴(即 x 轴),并且从一个比目前所有的落地方块更高的高度掉落而下。在上一个方块结束掉落,并保持静止后,才开始掉落新方块。
方块的底边具有非常大的粘性,并将保持固定在它们所接触的任何长度表面上(无论是数轴还是其他方块)。邻接掉落的边不会过早地粘合在一起,
因为只有底边才具有粘性。Example
输入: [[1, 2], [2, 3], [6, 1]]
输出: [2, 5, 5]
解释:
第一个方块 positions[0] = [1, 2] 掉落:
_aa
_aa
-------
方块最大高度为 2 。
第二个方块 positions[1] = [2, 3] 掉落:
__aaa
__aaa
__aaa
_aa__
_aa__
--------------
方块最大高度为5。
大的方块保持在较小的方块的顶部,不论它的重心在哪里,因为方块的底部边缘有非常大的粘性。
第三个方块 positions[1] = [6, 1] 掉落:
__aaa
__aaa
__aaa
_aa
_aa___a
--------------
方块最大高度为5。
因此,我们返回结果[2, 5, 5]。
Leetcode-cn.com 2022-05-27
🟡 面试题 17.11.find-closest-lcci
🏷️ Tags
#array #string
Description
有个内含单词的超大文本文件,给定任意两个
Example
🟡 面试题 17.11.find-closest-lcci
🏷️ Tags
#array #string
Description
有个内含单词的超大文本文件,给定任意两个
不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?Example
输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"
输出:1
Leetcode-cn.com 2022-05-28
🟢 1021.remove-outermost-parentheses
🏷️ Tags
#stack #string
Description
有效括号字符串为空
例如,
如果有效字符串
给出一个非空有效字符串
对
Example
🟢 1021.remove-outermost-parentheses
🏷️ Tags
#stack #string
Description
有效括号字符串为空
""、"(" + A + ")" 或 A + B ,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,
"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。如果有效字符串
s 非空,且不存在将其拆分为 s = A + B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。给出一个非空有效字符串
s,考虑将其进行原语化分解,使得:s = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。对
s 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 s 。Example
输入:s = "(()())(())"
输出:"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
Leetcode-cn.com 2022-05-29
🟡 468.validate-ip-address
🏷️ Tags
#string
Description
给定一个字符串
有效的IPv4地址 是
一个有效的IPv6地址 是一个格式为
在
例如
Example
🟡 468.validate-ip-address
🏷️ Tags
#string
Description
给定一个字符串
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.1” 为无效IPv4地址; “192.168.1.00” 、 “192.168@1.1” 为无效IPv4地址。一个有效的IPv6地址 是一个格式为
“x1:x2:x3:x4:x5:x6:x7:x8” 的IP地址,其中:1 <= xi.length <= 4xi 是一个 十六进制字符串 ,可以包含数字、小写英文字母( 'a' 到 'f' )和大写英文字母( 'A' 到 'F' )。在
xi 中允许前导零。例如
"2001:0db8:85a3:0000:0000:8a2e:0370:7334" 和 "2001:db8:85a3:0:0:8A2E:0370:7334" 是有效的 IPv6 地址,而 "2001:0db8:85a3::8A2E:037j:7334" 和 "02001:0db8:85a3:0000:0000:8a2e:0370:7334" 是无效的 IPv6 地址。Example
输入:queryIP = "172.16.254.1"
输出:"IPv4"
解释:有效的 IPv4 地址,返回 "IPv4"
Leetcode-cn.com 2022-05-30
🟢 1022.sum-of-root-to-leaf-binary-numbers
🏷️ Tags
#tree #depth_first_search #binary_tree
Description
给出一棵二叉树,其上每个结点的值都是
例如,如果路径为
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
返回这些数字之和。题目数据保证答案是一个 32 位 整数。
Example
🟢 1022.sum-of-root-to-leaf-binary-numbers
🏷️ Tags
#tree #depth_first_search #binary_tree
Description
给出一棵二叉树,其上每个结点的值都是
0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为
0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
返回这些数字之和。题目数据保证答案是一个 32 位 整数。
Example
输入:root = [1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
Leetcode-cn.com 2022-05-31
🔴 剑指 Offer II 114.Jf1JuT
🏷️ Tags
#depth_first_search #breadth_first_search #graph #topological_sort #array #string
Description
现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。
给定一个字符串列表
请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序 排列。若不存在合法字母顺序,返回
字符串
在第一个不同字母处,如果
如果前面
Example
🔴 剑指 Offer II 114.Jf1JuT
🏷️ Tags
#depth_first_search #breadth_first_search #graph #topological_sort #array #string
Description
现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。
给定一个字符串列表
words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序 排列。若不存在合法字母顺序,返回
"" 。若存在多种可能的合法字母顺序,返回其中 任意一种 顺序即可。字符串
s 字典顺序小于 字符串 t 有两种情况:在第一个不同字母处,如果
s 中的字母在这门外星语言的字母顺序中位于 t 中字母之前,那么 s 的字典顺序小于 t 。如果前面
min(s.length, t.length) 字母都相同,那么 s.length < t.length 时,s 的字典顺序也小于 t 。Example
输入:words = ["wrt","wrf","er","ett","rftt"]
输出:"wertf"
Leetcode-cn.com 2022-06-01
🟡 473.matchsticks-to-square
🏷️ Tags
#bit_manipulation #array #dynamic_programming #backtracking #bitmask
Description
你将得到一个整数数组
如果你能使这个正方形,则返回
Example
🟡 473.matchsticks-to-square
🏷️ Tags
#bit_manipulation #array #dynamic_programming #backtracking #bitmask
Description
你将得到一个整数数组
matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。你要用 所有的火柴棍 拼成一个正方形。你 不能折断 任何一根火柴棒,但你可以把它们连在一起,而且每根火柴棒必须 使用一次 。如果你能使这个正方形,则返回
true ,否则返回 false 。Example
输入: matchsticks = [1,1,2,2,2]
输出: true
解释: 能拼成一个边长为2的正方形,每边两根火柴。
Leetcode-cn.com 2022-06-02
🟡 450.delete-node-in-a-bst
🏷️ Tags
#tree #binary_search_tree #binary_tree
Description
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
Example
🟡 450.delete-node-in-a-bst
🏷️ Tags
#tree #binary_search_tree #binary_tree
Description
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
Example
输入:root = [5,3,6,2,4,null,7], key = 3
输出:[5,4,6,2,null,null,7]
解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。
一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。
另一个正确答案是 [5,2,6,null,4,null,7]。
Leetcode-cn.com 2022-06-03
🔴 829.consecutive-numbers-sum
🏷️ Tags
#math #enumeration
Description
给定一个正整数
示例 1:
Example
🔴 829.consecutive-numbers-sum
🏷️ Tags
#math #enumeration
Description
给定一个正整数
n,返回 连续正整数满足所有数字之和为 n 的组数 。 示例 1:
输入: n = 5
输出: 2
解释: 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。
Example
输入: n = 5
输出: 2
解释: 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。
Leetcode-cn.com 2022-06-04
🟢 929.unique-email-addresses
🏷️ Tags
#array #hash_table #string
Description
每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以
例如,在
如果在电子邮件地址的 本地名 部分中的某些字符之间添加句点(
例如,
如果在 本地名 中添加加号(
例如
可以同时使用这两个规则。
给你一个字符串数组
Example
🟢 929.unique-email-addresses
🏷️ Tags
#array #hash_table #string
Description
每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以
'@' 符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 '.' 或 '+' 。例如,在
alice@leetcode.com中, alice 是 本地名 ,而 leetcode.com 是 域名 。如果在电子邮件地址的 本地名 部分中的某些字符之间添加句点(
'.'),则发往那里的邮件将会转发到本地名中没有点的同一地址。请注意,此规则 不适用于域名 。例如,
"alice.z@leetcode.com” 和 “alicez@leetcode.com” 会转发到同一电子邮件地址。如果在 本地名 中添加加号(
'+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件。同样,此规则 不适用于域名 。例如
m.y+name@email.com 将转发到 my@email.com。可以同时使用这两个规则。
给你一个字符串数组
emails,我们会向每个 emails[i] 发送一封电子邮件。返回实际收到邮件的不同地址数目。Example
输入:emails = ["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
输出:2
解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。
Leetcode-cn.com 2022-06-05
🟡 478.generate-random-point-in-a-circle
🏷️ Tags
#geometry #math #rejection_sampling #randomized
Description
给定圆的半径和圆心的位置,实现函数
实现
Example
🟡 478.generate-random-point-in-a-circle
🏷️ Tags
#geometry #math #rejection_sampling #randomized
Description
给定圆的半径和圆心的位置,实现函数
randPoint ,在圆中产生均匀随机点。实现
Solution 类:Solution(double radius, double x_center, double y_center) 用圆的半径 radius 和圆心的位置 (x_center, y_center) 初始化对象randPoint() 返回圆内的一个随机点。圆周上的一点被认为在圆内。答案作为数组返回 [x, y] 。Example
输入:
["Solution","randPoint","randPoint","randPoint"]
[[1.0, 0.0, 0.0], [], [], []]
输出: [null, [-0.02493, -0.38077], [0.82314, 0.38945], [0.36572, 0.17248]]
解释:
Solution solution = new Solution(1.0, 0.0, 0.0);
solution.randPoint ();//返回[-0.02493,-0.38077]
solution.randPoint ();//返回[0.82314,0.38945]
solution.randPoint ();//返回[0.36572,0.17248]
Leetcode-cn.com 2022-06-06
🔴 732.my-calendar-iii
🏷️ Tags
#design #segment_tree #ordered_set
Description
当
给你一些日程安排
实现一个
Example
🔴 732.my-calendar-iii
🏷️ Tags
#design #segment_tree #ordered_set
Description
当
k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订。给你一些日程安排
[start, end) ,请你在每个日程安排添加后,返回一个整数 k ,表示所有先前日程安排会产生的最大 k 次预订。实现一个
MyCalendarThree 类来存放你的日程安排,你可以一直添加新的日程安排。MyCalendarThree() 初始化对象。int book(int start, int end) 返回一个整数 k ,表示日历中存在的 k 次预订的最大值。Example
输入:
["MyCalendarThree", "book", "book", "book", "book", "book", "book"]
[[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]]
输出:
[null, 1, 1, 2, 3, 3, 3]
解释:
MyCalendarThree myCalendarThree = new MyCalendarThree();
myCalendarThree.book(10, 20); // 返回 1 ,第一个日程安排可以预订并且不存在相交,所以最大 k 次预订是 1 次预订。
myCalendarThree.book(50, 60); // 返回 1 ,第二个日程安排可以预订并且不存在相交,所以最大 k 次预订是 1 次预订。
myCalendarThree.book(10, 40); // 返回 2 ,第三个日程安排 [10, 40) 与第一个日程安排相交,所以最大 k 次预订是 2 次预订。
myCalendarThree.book(5, 15); // 返回 3 ,剩下的日程安排的最大 k 次预订是 3 次预订。
myCalendarThree.book(5, 10); // 返回 3
myCalendarThree.book(25, 55); // 返回 3
Leetcode-cn.com 2022-06-07
🟡 875.koko-eating-bananas
🏷️ Tags
#array #binary_search
Description
珂珂喜欢吃香蕉。这里有
珂珂可以决定她吃香蕉的速度
珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。
返回她可以在
Example
🟡 875.koko-eating-bananas
🏷️ Tags
#array #binary_search
Description
珂珂喜欢吃香蕉。这里有
n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。珂珂可以决定她吃香蕉的速度
k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。 珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。
返回她可以在
h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。Example
输入:piles = [3,6,7,11], h = 8
输出:4
Leetcode-cn.com 2022-06-09
🟡 497.random-point-in-non-overlapping-rectangles
🏷️ Tags
#reservoir_sampling #math #binary_search #ordered_set #prefix_sum #randomized
Description
给定一个由非重叠的轴对齐矩形的数组
在一个给定的矩形覆盖的空间内任何整数点都有可能被返回。
请注意 ,整数点是具有整数坐标的点。
实现
Example
🟡 497.random-point-in-non-overlapping-rectangles
🏷️ Tags
#reservoir_sampling #math #binary_search #ordered_set #prefix_sum #randomized
Description
给定一个由非重叠的轴对齐矩形的数组
rects ,其中 rects[i] = [ai, bi, xi, yi] 表示 (ai, bi) 是第 i 个矩形的左下角点,(xi, yi) 是第 i 个矩形的右上角角点。设计一个算法来随机挑选一个被某一矩形覆盖的整数点。矩形周长上的点也算做是被矩形覆盖。所有满足要求的点必须等概率被返回。在一个给定的矩形覆盖的空间内任何整数点都有可能被返回。
请注意 ,整数点是具有整数坐标的点。
实现
Solution 类:Solution(int[][] rects) 用给定的矩形数组 rects 初始化对象。int[] pick() 返回一个随机的整数点 [u, v] 在给定的矩形所覆盖的空间内。Example
输入:
["Solution","pick","pick","pick","pick","pick"]
[[[[-2,-2,-1,-1],[1,0,3,0]]],[],[],[],[],[]]
输出:
[null,[-1,-2],[2,0],[-2,-1],[3,0],[-2,-2]
解释:
Solution solution = new Solution([[-2, -2, 1, 1], [2, 2, 4, 6]]);
solution.pick(); // 返回 [1, -2]
solution.pick(); // 返回 [1, -1]
solution.pick(); // 返回 [-1, -2]
solution.pick(); // 返回 [-2, -2]
solution.pick(); // 返回 [0, 0]
Leetcode-cn.com 2022-06-10
🔴 730.count-different-palindromic-subsequences
🏷️ Tags
#string #dynamic_programming
Description
给定一个字符串 s,返回
通过从 s 中删除 0 个或多个字符来获得子序列。
如果一个字符序列与它反转后的字符序列一致,那么它是「回文字符序列」。
如果有某个
注意:
结果可能很大,你需要对
Example
🔴 730.count-different-palindromic-subsequences
🏷️ Tags
#string #dynamic_programming
Description
给定一个字符串 s,返回
s 中不同的非空「回文子序列」个数 。通过从 s 中删除 0 个或多个字符来获得子序列。
如果一个字符序列与它反转后的字符序列一致,那么它是「回文字符序列」。
如果有某个
i , 满足 ai != bi ,则两个序列 a1, a2, ... 和 b1, b2, ... 不同。注意:
结果可能很大,你需要对
109 + 7 取模 。Example
输入:s = 'bccb'
输出:6
解释:6 个不同的非空回文子字符序列分别为:'b', 'c', 'bb', 'cc', 'bcb', 'bccb'。
注意:'bcb' 虽然出现两次但仅计数一次。
Leetcode-cn.com 2022-06-11
🟡 926.flip-string-to-monotone-increasing
🏷️ Tags
#string #dynamic_programming
Description
如果一个二进制字符串,是以一些
给你一个二进制字符串
返回使
Example
🟡 926.flip-string-to-monotone-increasing
🏷️ Tags
#string #dynamic_programming
Description
如果一个二进制字符串,是以一些
0(可能没有 0)后面跟着一些 1(也可能没有 1)的形式组成的,那么该字符串是 单调递增 的。给你一个二进制字符串
s,你可以将任何 0 翻转为 1 或者将 1 翻转为 0 。返回使
s 单调递增的最小翻转次数。Example
输入:s = "00110"
输出:1
解释:翻转最后一位得到 00111.
Leetcode-cn.com 2022-06-12
🟡 890.find-and-replace-pattern
🏷️ Tags
#array #hash_table #string
Description
你有一个单词列表
如果存在字母的排列
(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)
返回
你可以按任何顺序返回答案。
Example
🟡 890.find-and-replace-pattern
🏷️ Tags
#array #hash_table #string
Description
你有一个单词列表
words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。如果存在字母的排列
p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)
返回
words 中与给定模式匹配的单词列表。你可以按任何顺序返回答案。
Example
输入:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"
输出:["mee","aqq"]
解释:
"mee" 与模式匹配,因为存在排列 {a -> m, b -> e, ...}。
"ccc" 与模式不匹配,因为 {a -> c, b -> c, ...} 不是排列。
因为 a 和 b 映射到同一个字母。
Leetcode-cn.com 2022-06-13
🟢 1051.height-checker
🏷️ Tags
#array #counting_sort #sorting
Description
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。
排序后的高度情况用整数数组
给你一个整数数组
返回满足
Example
🟢 1051.height-checker
🏷️ Tags
#array #counting_sort #sorting
Description
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。
排序后的高度情况用整数数组
expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。给你一个整数数组
heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。返回满足
heights[i] != expected[i] 的 下标数量 。Example
输入:heights = [1,1,4,2,1,3]
输出:3
解释:
高度:[1,1,4,2,1,3]
预期:[1,1,1,2,3,4]
下标 2 、4 、5 处的学生高度不匹配。
Leetcode-cn.com 2022-06-14
🟡 498.diagonal-traverse
🏷️ Tags
#array #matrix #simulation
Description
给你一个大小为
Example
🟡 498.diagonal-traverse
🏷️ Tags
#array #matrix #simulation
Description
给你一个大小为
m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。Example
输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,4,7,5,3,6,8,9]
Leetcode-cn.com 2022-06-15
🔴 719.find-k-th-smallest-pair-distance
🏷️ Tags
#array #two_pointers #binary_search #sorting
Description
数对
给你一个整数数组
Example
🔴 719.find-k-th-smallest-pair-distance
🏷️ Tags
#array #two_pointers #binary_search #sorting
Description
数对
(a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。给你一个整数数组
nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 <= i < j < nums.length 。返回 所有数对距离中 第 k 小的数对距离。Example
输入:nums = [1,3,1], k = 1
输出:0
解释:数对和对应的距离如下:
(1,3) -> 2
(1,1) -> 0
(3,1) -> 2
距离第 1 小的数对是 (1,1) ,距离为 0 。