Leetcode-cn.com 2021-12-27
🟡 825.friends-of-appropriate-ages
🏷️ Tags
#array #two_pointers #binary_search #sorting
Description
在社交媒体网站上有
如果下述任意一个条件为真,那么用户
否则,
注意,如果
返回在该社交媒体网站上产生的好友请求总数。
Example
🟡 825.friends-of-appropriate-ages
🏷️ Tags
#array #two_pointers #binary_search #sorting
Description
在社交媒体网站上有
n 个用户。给你一个整数数组 ages ,其中 ages[i] 是第 i 个用户的年龄。如果下述任意一个条件为真,那么用户
x 将不会向用户 y(x != y)发送好友请求:age[y] <= 0.5 * age[x] + 7age[y] > age[x]age[y] > 100 && age[x] < 100否则,
x 将会向 y 发送一条好友请求。注意,如果
x 向 y 发送一条好友请求,y 不必也向 x 发送一条好友请求。另外,用户不会向自己发送好友请求。返回在该社交媒体网站上产生的好友请求总数。
Example
输入:ages = [16,16]
输出:2
解释:2 人互发好友请求。
Leetcode-cn.com 2021-12-28
🔴 472.concatenated-words
🏷️ Tags
#depth_first_search #trie #array #string #dynamic_programming
Description
给你一个 不含重复 单词的字符串数组
连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串。
Example
🔴 472.concatenated-words
🏷️ Tags
#depth_first_search #trie #array #string #dynamic_programming
Description
给你一个 不含重复 单词的字符串数组
words ,请你找出并返回 words 中的所有 连接词 。连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串。
Example
输入:words = ["cat","cats","catsdogcats","dog","dogcatsdog","hippopotamuses","rat","ratcatdogcat"]
输出:["catsdogcats","dogcatsdog","ratcatdogcat"]
解释:"catsdogcats" 由 "cats", "dog" 和 "cats" 组成;
"dogcatsdog" 由 "dog", "cats" 和 "dog" 组成;
"ratcatdogcat" 由 "rat", "cat", "dog" 和 "cat" 组成。
Leetcode-cn.com 2021-12-29
🟢 1995.count-special-quadruplets
🏷️ Tags
#array #enumeration
Description
给你一个 下标从 0 开始 的整数数组
Example
🟢 1995.count-special-quadruplets
🏷️ Tags
#array #enumeration
Description
给你一个 下标从 0 开始 的整数数组
nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 :nums[a] + nums[b] + nums[c] == nums[d] ,且a < b < c < dExample
输入:nums = [1,2,3,6]
输出:1
解释:满足要求的唯一一个四元组是 (0, 1, 2, 3) 因为 1 + 2 + 3 == 6 。
Leetcode-cn.com 2021-12-30
🟡 846.hand-of-straights
🏷️ Tags
#greedy #array #hash_table #sorting
Description
Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是
给你一个整数数组
Example
🟡 846.hand-of-straights
🏷️ Tags
#greedy #array #hash_table #sorting
Description
Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是
groupSize ,并且由 groupSize 张连续的牌组成。给你一个整数数组
hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。Example
输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3
输出:true
解释:Alice 手中的牌可以被重新排列为 [1,2,3],[2,3,4],[6,7,8]。
Leetcode-cn.com 2021-12-31
🟢 507.perfect-number
🏷️ Tags
#math
Description
对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
给定一个 整数
Example
🟢 507.perfect-number
🏷️ Tags
#math
Description
对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
给定一个 整数
n, 如果是完美数,返回 true,否则返回 falseExample
输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。
Leetcode-cn.com 2022-01-01
🟢 2022.convert-1d-array-into-2d-array
🏷️ Tags
#array #matrix #simulation
Description
给你一个下标从 0 开始的一维整数数组
请你根据上述过程返回一个
Example
🟢 2022.convert-1d-array-into-2d-array
🏷️ Tags
#array #matrix #simulation
Description
给你一个下标从 0 开始的一维整数数组
original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。请你根据上述过程返回一个
m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。Example
输入:original = [1,2,3,4], m = 2, n = 2
输出:[[1,2],[3,4]]
解释:
构造出的二维数组应该包含 2 行 2 列。
original 中第一个 n=2 的部分为 [1,2] ,构成二维数组的第一行。
original 中第二个 n=2 的部分为 [3,4] ,构成二维数组的第二行。
Leetcode-cn.com 2022-01-03
🟢 1185.day-of-the-week
🏷️ Tags
#math
Description
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:
您返回的结果必须是这几个值中的一个
Example
🟢 1185.day-of-the-week
🏷️ Tags
#math
Description
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:
day、month 和 year,分别表示日、月、年。您返回的结果必须是这几个值中的一个
{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。Example
输入:day = 31, month = 8, year = 2019
输出:"Saturday"
Leetcode-cn.com 2022-01-04
🔴 913.cat-and-mouse
🏷️ Tags
#breadth_first_search #graph #memoization #math #dynamic_programming #game_theory
Description
两位玩家分别扮演猫和老鼠,在一张 无向 图上进行游戏,两人轮流行动。
图的形式是:
老鼠从节点
在每个玩家的行动中,他们 必须 沿着图中与所在当前位置连通的一条边移动。例如,如果老鼠在节点
此外,猫无法移动到洞中(节点
然后,游戏在出现以下三种情形之一时结束:
如果猫和老鼠出现在同一个节点,猫获胜。
如果老鼠到达洞中,老鼠获胜。
如果某一位置重复出现(即,玩家的位置和移动顺序都与上一次行动相同),游戏平局。
给你一张图
如果老鼠获胜,则返回
如果猫获胜,则返回
如果平局,则返回
Example
🔴 913.cat-and-mouse
🏷️ Tags
#breadth_first_search #graph #memoization #math #dynamic_programming #game_theory
Description
两位玩家分别扮演猫和老鼠,在一张 无向 图上进行游戏,两人轮流行动。
图的形式是:
graph[a] 是一个列表,由满足 ab 是图中的一条边的所有节点 b 组成。老鼠从节点
1 开始,第一个出发;猫从节点 2 开始,第二个出发。在节点 0 处有一个洞。在每个玩家的行动中,他们 必须 沿着图中与所在当前位置连通的一条边移动。例如,如果老鼠在节点
1 ,那么它必须移动到 graph[1] 中的任一节点。此外,猫无法移动到洞中(节点
0)。然后,游戏在出现以下三种情形之一时结束:
如果猫和老鼠出现在同一个节点,猫获胜。
如果老鼠到达洞中,老鼠获胜。
如果某一位置重复出现(即,玩家的位置和移动顺序都与上一次行动相同),游戏平局。
给你一张图
graph ,并假设两位玩家都都以最佳状态参与游戏:如果老鼠获胜,则返回
1;如果猫获胜,则返回
2;如果平局,则返回
0 。Example
输入:graph = [[2,5],[3],[0,4,5],[1,4,5],[2,3],[0,2,3]]
输出:0
Leetcode-cn.com 2022-01-05
🟢 1576.replace-all-s-to-avoid-consecutive-repeating-characters
🏷️ Tags
#string
Description
给你一个仅包含小写英文字母和
注意:你 不能 修改非
题目测试用例保证 除
在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。
Example
🟢 1576.replace-all-s-to-avoid-consecutive-repeating-characters
🏷️ Tags
#string
Description
给你一个仅包含小写英文字母和
'?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非
'?' 字符。题目测试用例保证 除
'?' 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。
Example
输入:s = "?zs"
输出:"azs"
解释:该示例共有 25 种解决方案,从 "azs" 到 "yzs" 都是符合题目要求的。只有 "z" 是无效的修改,因为字符串 "zzs" 中有连续重复的两个 'z' 。
Leetcode-cn.com 2022-01-07
🟢 1614.maximum-nesting-depth-of-the-parentheses
🏷️ Tags
#stack #string
Description
如果字符串满足以下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS):
字符串是一个空字符串
字符串可以写为
字符串可以写为
类似地,可以定义任何有效括号字符串
例如:
给你一个 有效括号字符串
Example
🟢 1614.maximum-nesting-depth-of-the-parentheses
🏷️ Tags
#stack #string
Description
如果字符串满足以下条件之一,则可以称之为 有效括号字符串(valid parentheses string,可以简写为 VPS):
字符串是一个空字符串
"",或者是一个不为 "(" 或 ")" 的单字符。字符串可以写为
AB(A 与 B 字符串连接),其中 A 和 B 都是 有效括号字符串 。字符串可以写为
(A),其中 A 是一个 有效括号字符串 。类似地,可以定义任何有效括号字符串
S 的 嵌套深度 depth(S):depth("") = 0depth(C) = 0,其中 C 是单个字符的字符串,且该字符不是 "(" 或者 ")"depth(A + B) = max(depth(A), depth(B)),其中 A 和 B 都是 有效括号字符串depth("(" + A + ")") = 1 + depth(A),其中 A 是一个 有效括号字符串例如:
""、"()()"、"()(()())" 都是 有效括号字符串(嵌套深度分别为 0、1、2),而 ")(" 、"(()" 都不是 有效括号字符串 。给你一个 有效括号字符串
s,返回该字符串的 s 嵌套深度 。Example
输入:s = "(1+(2*3)+((8)/4))+1"
输出:3
解释:数字 8 在嵌套的 3 层括号中。
Leetcode-cn.com 2022-01-08
🟡 89.gray-code
🏷️ Tags
#bit_manipulation #math #backtracking
Description
n 位格雷码序列 是一个由
每个整数都在范围
第一个整数是
一个整数在序列中出现 不超过一次
每对 相邻 整数的二进制表示 恰好一位不同 ,且
第一个 和 最后一个 整数的二进制表示 恰好一位不同
给你一个整数
Example
🟡 89.gray-code
🏷️ Tags
#bit_manipulation #math #backtracking
Description
n 位格雷码序列 是一个由
2n 个整数组成的序列,其中:每个整数都在范围
[0, 2n - 1] 内(含 0 和 2n - 1)第一个整数是
0一个整数在序列中出现 不超过一次
每对 相邻 整数的二进制表示 恰好一位不同 ,且
第一个 和 最后一个 整数的二进制表示 恰好一位不同
给你一个整数
n ,返回任一有效的 n 位格雷码序列 。Example
输入:n = 2
输出:[0,1,3,2]
解释:
[0,1,3,2] 的二进制表示是 [00,01,11,10] 。
- 00 和 01 有一位不同
- 01 和 11 有一位不同
- 11 和 10 有一位不同
- 10 和 00 有一位不同
[0,2,3,1] 也是一个有效的格雷码序列,其二进制表示是 [00,10,11,01] 。
- 00 和 10 有一位不同
- 10 和 11 有一位不同
- 11 和 01 有一位不同
- 01 和 00 有一位不同
Leetcode-cn.com 2022-01-09
🟢 1629.slowest-key
🏷️ Tags
#array #string
Description
LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计
给你一个长度为
测试人员想要找出按键 持续时间最长 的键。第
注意,测试期间,同一个键可以在不同时刻被多次按下,而每次的持续时间都可能不同。
请返回按键 持续时间最长 的键,如果有多个这样的键,则返回 按字母顺序排列最大 的那个键。
Example
🟢 1629.slowest-key
🏷️ Tags
#array #string
Description
LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计
n 个),每次一个。给你一个长度为
n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。测试人员想要找出按键 持续时间最长 的键。第
i 次按键的持续时间为 releaseTimes[i] - releaseTimes[i - 1] ,第 0 次按键的持续时间为 releaseTimes[0] 。注意,测试期间,同一个键可以在不同时刻被多次按下,而每次的持续时间都可能不同。
请返回按键 持续时间最长 的键,如果有多个这样的键,则返回 按字母顺序排列最大 的那个键。
Example
输入:releaseTimes = [9,29,49,50], keysPressed = "cbcd"
输出:"c"
解释:按键顺序和持续时间如下:
按下 'c' ,持续时间 9(时间 0 按下,时间 9 松开)
按下 'b' ,持续时间 29 - 9 = 20(松开上一个键的时间 9 按下,时间 29 松开)
按下 'c' ,持续时间 49 - 29 = 20(松开上一个键的时间 29 按下,时间 49 松开)
按下 'd' ,持续时间 50 - 49 = 1(松开上一个键的时间 49 按下,时间 50 松开)
按键持续时间最长的键是 'b' 和 'c'(第二次按下时),持续时间都是 20
'c' 按字母顺序排列比 'b' 大,所以答案是 'c'
Leetcode-cn.com 2022-01-10
🟡 306.additive-number
🏷️ Tags
#string #backtracking
Description
累加数 是一个字符串,组成它的数字可以形成累加序列。
一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。
给你一个只包含数字
说明:累加序列里的数 不会 以 0 开头,所以不会出现
Example
🟡 306.additive-number
🏷️ Tags
#string #backtracking
Description
累加数 是一个字符串,组成它的数字可以形成累加序列。
一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。
给你一个只包含数字
'0'-'9' 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。说明:累加序列里的数 不会 以 0 开头,所以不会出现
1, 2, 03 或者 1, 02, 3 的情况。Example
输入:"112358"
输出:true
解释:累加序列为: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8
Leetcode-cn.com 2022-01-11
🔴 1036.escape-a-large-maze
🏷️ Tags
#depth_first_search #breadth_first_search #array #hash_table
Description
在一个 106 x 106 的网格中,每个网格上方格的坐标为
现在从源方格
每次移动,都可以走到网格中在四个方向上相邻的方格,只要该方格 不 在给出的封锁列表
只有在可以通过一系列的移动从源方格
Example
🔴 1036.escape-a-large-maze
🏷️ Tags
#depth_first_search #breadth_first_search #array #hash_table
Description
在一个 106 x 106 的网格中,每个网格上方格的坐标为
(x, y) 。现在从源方格
source = [sx, sy] 开始出发,意图赶往目标方格 target = [tx, ty] 。数组 blocked 是封锁的方格列表,其中每个 blocked[i] = [xi, yi] 表示坐标为 (xi, yi) 的方格是禁止通行的。每次移动,都可以走到网格中在四个方向上相邻的方格,只要该方格 不 在给出的封锁列表
blocked 上。同时,不允许走出网格。只有在可以通过一系列的移动从源方格
source 到达目标方格 target 时才返回 true。否则,返回 false。Example
输入:blocked = [[0,1],[1,0]], source = [0,0], target = [0,2]
输出:false
解释:
从源方格无法到达目标方格,因为我们无法在网格中移动。
无法向北或者向东移动是因为方格禁止通行。
无法向南或者向西移动是因为不能走出网格。
Leetcode-cn.com 2022-01-12
🟡 334.increasing-triplet-subsequence
🏷️ Tags
#greedy #array
Description
给你一个整数数组
如果存在这样的三元组下标
Example
🟡 334.increasing-triplet-subsequence
🏷️ Tags
#greedy #array
Description
给你一个整数数组
nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标
(i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。Example
输入:nums = [1,2,3,4,5]
输出:true
解释:任何 i < j < k 的三元组都满足题意
Leetcode-cn.com 2022-01-13
🟢 747.largest-number-at-least-twice-of-others
🏷️ Tags
#array #sorting
Description
给你一个整数数组
请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回
Example
🟢 747.largest-number-at-least-twice-of-others
🏷️ Tags
#array #sorting
Description
给你一个整数数组
nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回
-1 。Example
输入:nums = [3,6,1,0]
输出:1
解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。
Leetcode-cn.com 2022-01-14
🟡 373.find-k-pairs-with-smallest-sums
🏷️ Tags
#array #heap_priority_queue
Description
给定两个以升序排列的整数数组
定义一对值
请找到和最小的
Example
🟡 373.find-k-pairs-with-smallest-sums
🏷️ Tags
#array #heap_priority_queue
Description
给定两个以升序排列的整数数组
nums1 和 nums2 , 以及一个整数 k 。定义一对值
(u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。请找到和最小的
k 个数对 (u1,v1), (u2,v2) ... (uk,vk) 。Example
输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3
输出: [1,2],[1,4],[1,6]
解释: 返回序列中的前 3 对数:
[1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6]
Leetcode-cn.com 2022-01-14
🟡 373.find-k-pairs-with-smallest-sums
🏷️ Tags
#array #heap_priority_queue
Description
给定两个以升序排列的整数数组
定义一对值
请找到和最小的
Example
🟡 373.find-k-pairs-with-smallest-sums
🏷️ Tags
#array #heap_priority_queue
Description
给定两个以升序排列的整数数组
nums1 和 nums2 , 以及一个整数 k 。定义一对值
(u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。请找到和最小的
k 个数对 (u1,v1), (u2,v2) ... (uk,vk) 。Example
输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3
输出: [1,2],[1,4],[1,6]
解释: 返回序列中的前 3 对数:
[1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6]
Leetcode-cn.com 2022-01-16
🟡 382.linked-list-random-node
🏷️ Tags
#reservoir_sampling #linked_list #math #randomized
Description
给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。
实现
Example
🟡 382.linked-list-random-node
🏷️ Tags
#reservoir_sampling #linked_list #math #randomized
Description
给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。
实现
Solution 类:Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有节点被选中的概率相等。Example
输入
["Solution", "getRandom", "getRandom", "getRandom", "getRandom", "getRandom"]
[[[1, 2, 3]], [], [], [], [], []]
输出
[null, 1, 3, 2, 2, 3]
解释
Solution solution = new Solution([1, 2, 3]);
solution.getRandom(); // 返回 1
solution.getRandom(); // 返回 3
solution.getRandom(); // 返回 2
solution.getRandom(); // 返回 2
solution.getRandom(); // 返回 3
// getRandom() 方法应随机返回 1、2、3中的一个,每个元素被返回的概率相等。
Leetcode-cn.com 2022-01-17
🔴 1220.count-vowels-permutation
🏷️ Tags
#dynamic_programming
Description
给你一个整数
字符串中的每个字符都应当是小写元音字母(
每个元音
每个元音
每个元音
每个元音
每个元音
由于答案可能会很大,所以请你返回 模
Example
🔴 1220.count-vowels-permutation
🏷️ Tags
#dynamic_programming
Description
给你一个整数
n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串:字符串中的每个字符都应当是小写元音字母(
'a', 'e', 'i', 'o', 'u')每个元音
'a' 后面都只能跟着 'e'每个元音
'e' 后面只能跟着 'a' 或者是 'i'每个元音
'i' 后面 不能 再跟着另一个 'i'每个元音
'o' 后面只能跟着 'i' 或者是 'u'每个元音
'u' 后面只能跟着 'a'由于答案可能会很大,所以请你返回 模
10^9 + 7 之后的结果。Example
输入:n = 1
输出:5
解释:所有可能的字符串分别是:"a", "e", "i" , "o" 和 "u"。