Leetcode-cn.com 2022-04-16
🔴 479.largest-palindrome-product
🏷️ Tags
#math
Description
给定一个整数 n ,返回 可表示为两个
Example
🔴 479.largest-palindrome-product
🏷️ Tags
#math
Description
给定一个整数 n ,返回 可表示为两个
n 位整数乘积的 最大回文整数 。因为答案可能非常大,所以返回它对 1337 取余 。Example
输入: n = 1
输出: 9
Leetcode-cn.com 2022-04-17
🟢 819.most-common-word
🏷️ Tags
#hash_table #string #counting
Description
给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。
题目保证至少有一个词不在禁用列表中,而且答案唯一。
禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。
Example
🟢 819.most-common-word
🏷️ Tags
#hash_table #string #counting
Description
给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。
题目保证至少有一个词不在禁用列表中,而且答案唯一。
禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。
Example
输入:
paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
banned = ["hit"]
输出: "ball"
解释:
"hit" 出现了3次,但它是一个禁用的单词。
"ball" 出现了2次 (同时没有其他单词出现2次),所以它是段落里出现次数最多的,且不在禁用列表中的单词。
注意,所有这些单词在段落里不区分大小写,标点符号需要忽略(即使是紧挨着单词也忽略, 比如 "ball,"),
"hit"不是最终的答案,虽然它出现次数更多,但它在禁用单词列表中。
Leetcode-cn.com 2022-04-18
🟡 386.lexicographical-numbers
🏷️ Tags
#depth_first_search #trie
Description
给你一个整数
你必须设计一个时间复杂度为
Example
🟡 386.lexicographical-numbers
🏷️ Tags
#depth_first_search #trie
Description
给你一个整数
n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为
O(n) 且使用 O(1) 额外空间的算法。Example
输入:n = 13
输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]
Leetcode-cn.com 2022-04-19
🟢 821.shortest-distance-to-a-character
🏷️ Tags
#array #two_pointers #string
Description
给你一个字符串
返回一个整数数组
两个下标
Example
🟢 821.shortest-distance-to-a-character
🏷️ Tags
#array #two_pointers #string
Description
给你一个字符串
s 和一个字符 c ,且 c 是 s 中出现过的字符。返回一个整数数组
answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。两个下标
i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。Example
输入:s = "loveleetcode", c = "e"
输出:[3,2,1,0,1,0,0,1,2,2,1,0]
解释:字符 'e' 出现在下标 3、5、6 和 11 处(下标从 0 开始计数)。
距下标 0 最近的 'e' 出现在下标 3 ,所以距离为 abs(0 - 3) = 3 。
距下标 1 最近的 'e' 出现在下标 3 ,所以距离为 abs(1 - 3) = 2 。
对于下标 4 ,出现在下标 3 和下标 5 处的 'e' 都离它最近,但距离是一样的 abs(4 - 3) == abs(4 - 5) = 1 。
距下标 8 最近的 'e' 出现在下标 6 ,所以距离为 abs(8 - 6) = 2 。
Leetcode-cn.com 2022-04-20
🟡 388.longest-absolute-file-path
🏷️ Tags
#stack #depth_first_search #string
Description
假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个Example
🟡 388.longest-absolute-file-path
🏷️ Tags
#stack #depth_first_search #string
Description
假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个Example
输入:input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"
输出:20
解释:只有一个文件,绝对路径为 "dir/subdir2/file.ext" ,路径长度 20
Leetcode-cn.com 2022-04-21
🟢 824.goat-latin
🏷️ Tags
#string
Description
给你一个由若干单词组成的句子
请你将句子转换为 “山羊拉丁文(Goat Latin)”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:
如果单词以元音开头(
例如,单词
如果单词以辅音字母开头(即,非元音字母),移除第一个字符并将它放到末尾,之后再添加
例如,单词
根据单词在句子中的索引,在单词最后添加与索引相同数量的字母
例如,在第一个单词后添加
返回将
Example
🟢 824.goat-latin
🏷️ Tags
#string
Description
给你一个由若干单词组成的句子
sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为 “山羊拉丁文(Goat Latin)”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:
如果单词以元音开头(
'a', 'e', 'i', 'o', 'u'),在单词后添加"ma"。例如,单词
"apple" 变为 "applema" 。如果单词以辅音字母开头(即,非元音字母),移除第一个字符并将它放到末尾,之后再添加
"ma"。例如,单词
"goat" 变为 "oatgma" 。根据单词在句子中的索引,在单词最后添加与索引相同数量的字母
'a',索引从 1 开始。例如,在第一个单词后添加
"a" ,在第二个单词后添加 "aa" ,以此类推。返回将
sentence 转换为山羊拉丁文后的句子。Example
输入:sentence = "I speak Goat Latin"
输出:"Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
Leetcode-cn.com 2022-04-22
🟡 396.rotate-function
🏷️ Tags
#array #math #dynamic_programming
Description
给定一个长度为
假设
返回
生成的测试用例让答案符合 32 位 整数。
Example
🟡 396.rotate-function
🏷️ Tags
#array #math #dynamic_programming
Description
给定一个长度为
n 的整数数组 nums 。假设
arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]返回
F(0), F(1), ..., F(n-1)中的最大值 。生成的测试用例让答案符合 32 位 整数。
Example
输入: nums = [4,3,2,6]
输出: 26
解释:
F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25
F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16
F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23
F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26
所以 F(0), F(1), F(2), F(3) 中的最大值是 F(3) = 26 。
Leetcode-cn.com 2022-04-24
🟢 868.binary-gap
🏷️ Tags
#bit_manipulation #math
Description
给定一个正整数
如果只有
Example
🟢 868.binary-gap
🏷️ Tags
#bit_manipulation #math
Description
给定一个正整数
n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有
0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。Example
输入:n = 22
输出:2
解释:22 的二进制是 "10110" 。
在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。
第一对相邻的 1 中,两个 1 之间的距离为 2 。
第二对相邻的 1 中,两个 1 之间的距离为 1 。
答案取两个距离之中最大的,也就是 2 。
Leetcode-cn.com 2022-04-27
🟡 417.pacific-atlantic-water-flow
🏷️ Tags
#depth_first_search #breadth_first_search #array #matrix
Description
有一个
这个岛被分割成一个由若干方形单元格组成的网格。给定一个
岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。
返回 网格坐标
Example
🟡 417.pacific-atlantic-water-flow
🏷️ Tags
#depth_first_search #breadth_first_search #array #matrix
Description
有一个
m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。这个岛被分割成一个由若干方形单元格组成的网格。给定一个
m x n 的整数矩阵 heights , heights[r][c] 表示坐标 (r, c) 上单元格 高于海平面的高度 。岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。
返回 网格坐标
result 的 2D列表 ,其中 result[i] = [ri, ci] 表示雨水可以从单元格 (ri, ci) 流向 太平洋和大西洋 。Example
输入: heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]]
输出: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]]
Leetcode-cn.com 2022-04-28
🟢 905.sort-array-by-parity
🏷️ Tags
#array #two_pointers #sorting
Description
给你一个整数数组
返回满足此条件的 任一数组 作为答案。
Example
🟢 905.sort-array-by-parity
🏷️ Tags
#array #two_pointers #sorting
Description
给你一个整数数组
nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。
Example
输入:nums = [3,1,2,4]
输出:[2,4,3,1]
解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。
Leetcode-cn.com 2022-04-30
🟢 908.smallest-range-i
🏷️ Tags
#array #math
Description
给你一个整数数组
在一个操作中,您可以选择
在对
Example
🟢 908.smallest-range-i
🏷️ Tags
#array #math
Description
给你一个整数数组
nums,和一个整数 k 。在一个操作中,您可以选择
0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的整数。对于每个索引 i ,最多 只能 应用 一次 此操作。nums 的 分数 是 nums 中最大和最小元素的差值。 在对
nums 中的每个索引最多应用一次上述操作后,返回 nums 的最低 分数 。Example
输入:nums = [1], k = 0
输出:0
解释:分数是 max(nums) - min(nums) = 1 - 1 = 0。
Leetcode-cn.com 2022-05-01
🟡 1305.all-elements-in-two-binary-search-trees
🏷️ Tags
#tree #depth_first_search #binary_search_tree #binary_tree #sorting
Description
给你
Example
🟡 1305.all-elements-in-two-binary-search-trees
🏷️ Tags
#tree #depth_first_search #binary_search_tree #binary_tree #sorting
Description
给你
root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.Example
输入:root1 = [2,1,4], root2 = [1,0,3]
输出:[0,1,1,2,3,4]
Leetcode-cn.com 2022-05-02
🔴 591.tag-validator
🏷️ Tags
#stack #string
undefinedExample
🔴 591.tag-validator
🏷️ Tags
#stack #string
undefinedExample
输入: "<DIV>This is the first line <![CDATA[<div>]]></DIV>"
输出: True
解释:
代码被包含在了闭合的标签内: <DIV> 和 </DIV> 。
TAG_NAME 是合法的,TAG_CONTENT 包含了一些字符和 cdata 。
即使 CDATA_CONTENT 含有不匹配的起始标签和不合法的 TAG_NAME,它应该被视为普通的文本,而不是标签。
所以 TAG_CONTENT 是合法的,因此代码是合法的。最终返回True。
输入: "<DIV>>> ![cdata[]] <![CDATA[<div>]>]]>]]>>]</DIV>"
输出: True
解释:
我们首先将代码分割为: start_tag|tag_content|end_tag 。
start_tag -> "<DIV>"
end_tag -> "</DIV>"
tag_content 也可被分割为: text1|cdata|text2 。
text1 -> ">> ![cdata[]] "
cdata -> "<![CDATA[<div>]>]]>" ,其中 CDATA_CONTENT 为 "<div>]>"
text2 -> "]]>>]"
start_tag 不是 "<DIV>>>" 的原因参照规则 6 。
cdata 不是 "<![CDATA[<div>]>]]>]]>" 的原因参照规则 7 。
Leetcode-cn.com 2022-05-03
🟢 937.reorder-data-in-log-files
🏷️ Tags
#array #string #sorting
Description
给你一个日志数组
有两种不同类型的日志:
字母日志:除标识符之外,所有字均由小写字母组成
数字日志:除标识符之外,所有字均由数字组成
请按下述规则将日志重新排序:
所有 字母日志 都排在 数字日志 之前。
字母日志 在内容不同时,忽略标识符后,按内容字母顺序排序;在内容相同时,按标识符排序。
数字日志 应该保留原来的相对顺序。
返回日志的最终顺序。
Example
🟢 937.reorder-data-in-log-files
🏷️ Tags
#array #string #sorting
Description
给你一个日志数组
logs。每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 。有两种不同类型的日志:
字母日志:除标识符之外,所有字均由小写字母组成
数字日志:除标识符之外,所有字均由数字组成
请按下述规则将日志重新排序:
所有 字母日志 都排在 数字日志 之前。
字母日志 在内容不同时,忽略标识符后,按内容字母顺序排序;在内容相同时,按标识符排序。
数字日志 应该保留原来的相对顺序。
返回日志的最终顺序。
Example
输入:logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
输出:["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
解释:
字母日志的内容都不同,所以顺序为 "art can", "art zero", "own kit dig" 。
数字日志保留原来的相对顺序 "dig1 8 1 5 1", "dig2 3 6" 。
Leetcode-cn.com 2022-05-05
🟡 713.subarray-product-less-than-k
🏷️ Tags
#array #sliding_window
Description
给你一个整数数组
Example
🟡 713.subarray-product-less-than-k
🏷️ Tags
#array #sliding_window
Description
给你一个整数数组
nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。Example
输入:nums = [10,5,2,6], k = 100
输出:8
解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。
需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。
Leetcode-cn.com 2022-05-06
🟢 933.number-of-recent-calls
🏷️ Tags
#design #queue #data_stream
Description
写一个
请你实现
保证 每次对
Example
🟢 933.number-of-recent-calls
🏷️ Tags
#design #queue #data_stream
Description
写一个
RecentCounter 类来计算特定时间范围内最近的请求。请你实现
RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对
ping 的调用都使用比之前更大的 t 值。Example
输入:
["RecentCounter", "ping", "ping", "ping", "ping"]
[[], [1], [100], [3001], [3002]]
输出:
[null, 1, 2, 3, 3]
解释:
RecentCounter recentCounter = new RecentCounter();
recentCounter.ping(1); // requests = [1],范围是 [-2999,1],返回 1
recentCounter.ping(100); // requests = [1, 100],范围是 [-2900,100],返回 2
recentCounter.ping(3001); // requests = [1, 100, 3001],范围是 [1,3001],返回 3
recentCounter.ping(3002); // requests = [1, 100, 3001, 3002],范围是 [2,3002],返回 3
Leetcode-cn.com 2022-05-07
🟡 433.minimum-genetic-mutation
🏷️ Tags
#breadth_first_search #hash_table #string
Description
基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是
假设我们需要调查从基因序列
例如,
另有一个基因库
给你两个基因序列
注意:起始基因序列
Example
🟡 433.minimum-genetic-mutation
🏷️ Tags
#breadth_first_search #hash_table #string
Description
基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是
'A'、'C'、'G' 和 'T' 之一。假设我们需要调查从基因序列
start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。例如,
"AACCGGTT" --> "AACCGGTA" 就是一次基因变化。另有一个基因库
bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。给你两个基因序列
start 和 end ,以及一个基因库 bank ,请你找出并返回能够使 start 变化为 end 所需的最少变化次数。如果无法完成此基因变化,返回 -1 。注意:起始基因序列
start 默认是有效的,但是它并不一定会出现在基因库中。Example
输入:start = "AACCGGTT", end = "AACCGGTA", bank = ["AACCGGTA"]
输出:1
Leetcode-cn.com 2022-05-08
🟡 442.find-all-duplicates-in-an-array
🏷️ Tags
#array #hash_table
Description
给你一个长度为
你必须设计并实现一个时间复杂度为
Example
🟡 442.find-all-duplicates-in-an-array
🏷️ Tags
#array #hash_table
Description
给你一个长度为
n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为
O(n) 且仅使用常量额外空间的算法解决此问题。Example
输入:nums = [4,3,2,7,8,2,3,1]
输出:[2,3]
Leetcode-cn.com 2022-05-09
🟢 942.di-string-match
🏷️ Tags
#greedy #array #math #two_pointers #string
Description
由范围
如果
如果
给定一个字符串
Example
🟢 942.di-string-match
🏷️ Tags
#greedy #array #math #two_pointers #string
Description
由范围
[0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:如果
perm[i] < perm[i + 1] ,那么 s[i] == 'I' 如果
perm[i] > perm[i + 1] ,那么 s[i] == 'D' 给定一个字符串
s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中 任何一个 。Example
输入:s = "IDID"
输出:[0,4,1,3,2]
Leetcode-cn.com 2022-05-10
🔴 1728.cat-and-mouse-ii
🏷️ Tags
#breadth_first_search #graph #memoization #math #dynamic_programming #game_theory
Description
一只猫和一只老鼠在玩一个叫做猫和老鼠的游戏。
它们所处的环境设定是一个
玩家由字符
地板由字符
墙用字符
食物用字符
字符
猫和老鼠按照如下规则移动:
老鼠 先移动 ,然后两名玩家轮流移动。
每一次操作时,猫和老鼠可以跳到上下左右四个方向之一的格子,他们不能跳过墙也不能跳出
它们可以停留在原地。
老鼠可以跳跃过猫的位置。
游戏有 4 种方式会结束:
如果猫跟老鼠处在相同的位置,那么猫获胜。
如果猫先到达食物,那么猫获胜。
如果老鼠先到达食物,那么老鼠获胜。
如果老鼠不能在 1000 次操作以内到达食物,那么猫获胜。
给你
Example
🔴 1728.cat-and-mouse-ii
🏷️ Tags
#breadth_first_search #graph #memoization #math #dynamic_programming #game_theory
Description
一只猫和一只老鼠在玩一个叫做猫和老鼠的游戏。
它们所处的环境设定是一个
rows x cols 的方格 grid ,其中每个格子可能是一堵墙、一块地板、一位玩家(猫或者老鼠)或者食物。玩家由字符
'C' (代表猫)和 'M' (代表老鼠)表示。地板由字符
'.' 表示,玩家可以通过这个格子。墙用字符
'#' 表示,玩家不能通过这个格子。食物用字符
'F' 表示,玩家可以通过这个格子。字符
'C' , 'M' 和 'F' 在 grid 中都只会出现一次。猫和老鼠按照如下规则移动:
老鼠 先移动 ,然后两名玩家轮流移动。
每一次操作时,猫和老鼠可以跳到上下左右四个方向之一的格子,他们不能跳过墙也不能跳出
grid 。catJump 和 mouseJump 是猫和老鼠分别跳一次能到达的最远距离,它们也可以跳小于最大距离的长度。它们可以停留在原地。
老鼠可以跳跃过猫的位置。
游戏有 4 种方式会结束:
如果猫跟老鼠处在相同的位置,那么猫获胜。
如果猫先到达食物,那么猫获胜。
如果老鼠先到达食物,那么老鼠获胜。
如果老鼠不能在 1000 次操作以内到达食物,那么猫获胜。
给你
rows x cols 的矩阵 grid 和两个整数 catJump 和 mouseJump ,双方都采取最优策略,如果老鼠获胜,那么请你返回 true ,否则返回 false 。Example
输入:grid = ["####F","#C...","M...."], catJump = 1, mouseJump = 2
输出:true
解释:猫无法抓到老鼠,也没法比老鼠先到达食物。