Leetcode-cn.com 2022-03-01
🟡 6.zigzag-conversion
🏷️ Tags
#string
Description
将一个给定字符串
比如输入字符串为
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:
请你实现这个将字符串进行指定行数变换的函数:
Example
🟡 6.zigzag-conversion
🏷️ Tags
#string
Description
将一个给定字符串
s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为
"PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:
"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
Example
输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
Leetcode-cn.com 2022-03-02
🔴 564.find-the-closest-palindrome
🏷️ Tags
#math #string
Description
给定一个表示整数的字符串
“最近的”定义为两个整数差的绝对值最小。
Example
🔴 564.find-the-closest-palindrome
🏷️ Tags
#math #string
Description
给定一个表示整数的字符串
n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。“最近的”定义为两个整数差的绝对值最小。
Example
输入: n = "123"
输出: "121"
Leetcode-cn.com 2022-03-03
🟢 258.add-digits
🏷️ Tags
#math #number_theory #simulation
Description
给定一个非负整数
Example
🟢 258.add-digits
🏷️ Tags
#math #number_theory #simulation
Description
给定一个非负整数
num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。Example
输入: num = 38
输出: 2
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2 是一位数,所以返回 2。
Leetcode-cn.com 2022-03-04
🟡 2104.sum-of-subarray-ranges
🏷️ Tags
#stack #array #monotonic_stack
Description
给你一个整数数组
返回
子数组是数组中一个连续 非空 的元素序列。
Example
🟡 2104.sum-of-subarray-ranges
🏷️ Tags
#stack #array #monotonic_stack
Description
给你一个整数数组
nums 。nums 中,子数组的 范围 是子数组中最大元素和最小元素的差值。返回
nums 中 所有 子数组范围的 和 。子数组是数组中一个连续 非空 的元素序列。
Example
输入:nums = [1,2,3]
输出:4
解释:nums 的 6 个子数组如下所示:
[1],范围 = 最大 - 最小 = 1 - 1 = 0
[2],范围 = 2 - 2 = 0
[3],范围 = 3 - 3 = 0
[1,2],范围 = 2 - 1 = 1
[2,3],范围 = 3 - 2 = 1
[1,2,3],范围 = 3 - 1 = 2
所有范围的和是 0 + 0 + 0 + 1 + 1 + 2 = 4
Leetcode-cn.com 2022-03-05
🟢 521.longest-uncommon-subsequence-i
🏷️ Tags
#string
Description
给你两个字符串
「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。
字符串
例如,
Example
🟢 521.longest-uncommon-subsequence-i
🏷️ Tags
#string
Description
给你两个字符串
a 和 b,请返回 这两个字符串中 最长的特殊序列 。如果不存在,则返回 -1 。「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。
字符串
s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。例如,
“abc” 是 “aebdc” 的子序列,因为您可以删除 “aebdc” 中的下划线字符来得到 “abc” 。 “aebdc” 的子序列还包括 “aebdc” 、 “aeb” 和 “” (空字符串)。Example
输入: a = "aba", b = "cdc"
输出: 3
解释: 最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对方的子序列。
Leetcode-cn.com 2022-03-06
🟡 2100.find-good-days-to-rob-the-bank
🏷️ Tags
#array #dynamic_programming #prefix_sum
Description
你和一群强盗准备打劫银行。给你一个下标从 0 开始的整数数组
如果第
第
第
第
更正式的,第
请你返回一个数组,包含 所有 适合打劫银行的日子(下标从 0 开始)。返回的日子可以 任意 顺序排列。
Example
🟡 2100.find-good-days-to-rob-the-bank
🏷️ Tags
#array #dynamic_programming #prefix_sum
Description
你和一群强盗准备打劫银行。给你一个下标从 0 开始的整数数组
security ,其中 security[i] 是第 i 天执勤警卫的数量。日子从 0 开始编号。同时给你一个整数 time 。如果第
i 天满足以下所有条件,我们称它为一个适合打劫银行的日子:第
i 天前和后都分别至少有 time 天。第
i 天前连续 time 天警卫数目都是非递增的。第
i 天后连续 time 天警卫数目都是非递减的。更正式的,第
i 天是一个合适打劫银行的日子当且仅当:security[i - time] >= security[i - time + 1] >= ... >= security[i] <= ... <= security[i + time - 1] <= security[i + time].请你返回一个数组,包含 所有 适合打劫银行的日子(下标从 0 开始)。返回的日子可以 任意 顺序排列。
Example
输入:security = [5,3,3,3,5,6,2], time = 2
输出:[2,3]
解释:
第 2 天,我们有 security[0] >= security[1] >= security[2] <= security[3] <= security[4] 。
第 3 天,我们有 security[1] >= security[2] >= security[3] <= security[4] <= security[5] 。
没有其他日子符合这个条件,所以日子 2 和 3 是适合打劫银行的日子。
Leetcode-cn.com 2022-03-07
🟢 504.base-7
🏷️ Tags
#math
Description
给定一个整数
Example
🟢 504.base-7
🏷️ Tags
#math
Description
给定一个整数
num,将其转化为 7 进制,并以字符串形式输出。Example
输入: num = 100
输出: "202"
Leetcode-cn.com 2022-03-08
🟡 2055.plates-between-candles
🏷️ Tags
#array #string #binary_search #prefix_sum
Description
给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符串
同时给你一个下标从 0 开始的二维整数数组
比方说,
请你返回一个整数数组
Example
🟡 2055.plates-between-candles
🏷️ Tags
#array #string #binary_search #prefix_sum
Description
给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符串
s ,它只包含字符 '*' 和 '|' ,其中 '*' 表示一个 盘子 ,'|' 表示一支 蜡烛 。同时给你一个下标从 0 开始的二维整数数组
queries ,其中 queries[i] = [lefti, righti] 表示 子字符串 s[lefti...righti] (包含左右端点的字符)。对于每个查询,你需要找到 子字符串中 在 两支蜡烛之间 的盘子的 数目 。如果一个盘子在 子字符串中 左边和右边 都 至少有一支蜡烛,那么这个盘子满足在 两支蜡烛之间 。比方说,
s = "||**||**|*" ,查询 [3, 8] ,表示的是子字符串 "*||**|" 。子字符串中在两支蜡烛之间的盘子数目为 2 ,子字符串中右边两个盘子在它们左边和右边 都 至少有一支蜡烛。请你返回一个整数数组
answer ,其中 answer[i] 是第 i 个查询的答案。Example
输入:s = "**|**|***|", queries = [[2,5],[5,9]]
输出:[2,3]
解释:
- queries[0] 有两个盘子在蜡烛之间。
- queries[1] 有三个盘子在蜡烛之间。
Leetcode-cn.com 2022-03-09
🔴 798.smallest-rotation-with-highest-score
🏷️ Tags
#array #prefix_sum
Description
给定一个数组
例如,如果数组为
在所有可能的轮调中,返回我们所能得到的最高分数对应的轮调索引 K。如果有多个答案,返回满足条件的最小的索引 K。
Example
🔴 798.smallest-rotation-with-highest-score
🏷️ Tags
#array #prefix_sum
Description
给定一个数组
A,我们可以将它按一个非负整数 K 进行轮调,这样可以使数组变为 A[K], A[K+1], A{K+2], ... A[A.length - 1], A[0], A[1], ..., A[K-1] 的形式。此后,任何值小于或等于其索引的项都可以记作一分。例如,如果数组为
[2, 4, 1, 3, 0],我们按 K = 2 进行轮调后,它将变成 [1, 3, 0, 2, 4]。这将记作 3 分,因为 1 > 0 [no points], 3 > 1 [no points], 0 <= 2 [one point], 2 <= 3 [one point], 4 <= 4 [one point]。在所有可能的轮调中,返回我们所能得到的最高分数对应的轮调索引 K。如果有多个答案,返回满足条件的最小的索引 K。
Example
输入:[2, 3, 1, 4, 0]
输出:3
解释:
下面列出了每个 K 的得分:
K = 0, A = [2,3,1,4,0], score 2
K = 1, A = [3,1,4,0,2], score 3
K = 2, A = [1,4,0,2,3], score 3
K = 3, A = [4,0,2,3,1], score 4
K = 4, A = [0,2,3,1,4], score 3
所以我们应当选择 K = 3,得分最高。
Leetcode-cn.com 2022-03-11
🟡 2049.count-nodes-with-the-highest-score
🏷️ Tags
#tree #depth_first_search #array #binary_tree
Description
给你一棵根节点为
一个子树的 大小 为这个子树内节点的数目。每个节点都有一个与之关联的 分数 。求出某个节点分数的方法是,将这个节点和与它相连的边全部 删除 ,剩余部分是若干个 非空 子树,这个节点的 分数 为所有这些子树 大小的乘积 。
请你返回有 最高得分 节点的 数目 。
Example
🟡 2049.count-nodes-with-the-highest-score
🏷️ Tags
#tree #depth_first_search #array #binary_tree
Description
给你一棵根节点为
0 的 二叉树 ,它总共有 n 个节点,节点编号为 0 到 n - 1 。同时给你一个下标从 0 开始的整数数组 parents 表示这棵树,其中 parents[i] 是节点 i 的父节点。由于节点 0 是根,所以 parents[0] == -1 。一个子树的 大小 为这个子树内节点的数目。每个节点都有一个与之关联的 分数 。求出某个节点分数的方法是,将这个节点和与它相连的边全部 删除 ,剩余部分是若干个 非空 子树,这个节点的 分数 为所有这些子树 大小的乘积 。
请你返回有 最高得分 节点的 数目 。
Example
输入:parents = [-1,2,0,2,0]
输出:3
解释:
- 节点 0 的分数为:3 * 1 = 3
- 节点 1 的分数为:4 = 4
- 节点 2 的分数为:1 * 1 * 2 = 2
- 节点 3 的分数为:4 = 4
- 节点 4 的分数为:4 = 4
最高得分为 4 ,有三个节点得分为 4 (分别是节点 1,3 和 4 )。
Leetcode-cn.com 2022-03-13
🟡 393.utf-8-validation
🏷️ Tags
#bit_manipulation #array
Description
给定一个表示数据的整数数组
UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:
对于 1 字节 的字符,字节的第一位设为 0 ,后面 7 位为这个符号的 unicode 码。
对于 n 字节 的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 unicode 码。
这是 UTF-8 编码的工作方式:
注意:输入是整数数组。只有每个整数的 最低 8 个有效位 用来存储数据。这意味着每个整数只表示 1 字节的数据。
Example
🟡 393.utf-8-validation
🏷️ Tags
#bit_manipulation #array
Description
给定一个表示数据的整数数组
data ,返回它是否为有效的 UTF-8 编码。UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:
对于 1 字节 的字符,字节的第一位设为 0 ,后面 7 位为这个符号的 unicode 码。
对于 n 字节 的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 unicode 码。
这是 UTF-8 编码的工作方式:
Char. number range | UTF-8 octet sequence
(hexadecimal) | (binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
注意:输入是整数数组。只有每个整数的 最低 8 个有效位 用来存储数据。这意味着每个整数只表示 1 字节的数据。
Example
输入:data = [197,130,1]
输出:true
解释:数据表示字节序列:11000101 10000010 00000001。
这是有效的 utf-8 编码,为一个 2 字节字符,跟着一个 1 字节字符。
Leetcode-cn.com 2022-03-14
🟢 599.minimum-index-sum-of-two-lists
🏷️ Tags
#array #hash_table #string
Description
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
Example
🟢 599.minimum-index-sum-of-two-lists
🏷️ Tags
#array #hash_table #string
Description
假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
Example
输入: list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
输出: ["Shogun"]
解释: 他们唯一共同喜爱的餐厅是“Shogun”。
Leetcode-cn.com 2022-03-15
🟡 2044.count-number-of-maximum-bitwise-or-subsets
🏷️ Tags
#bit_manipulation #array #backtracking
Description
给你一个整数数组
如果数组
对数组
Example
🟡 2044.count-number-of-maximum-bitwise-or-subsets
🏷️ Tags
#bit_manipulation #array #backtracking
Description
给你一个整数数组
nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。如果数组
a 可以由数组 b 删除一些元素(或不删除)得到,则认为数组 a 是数组 b 的一个 子集 。如果选中的元素下标位置不一样,则认为两个子集 不同 。对数组
a 执行 按位或 ,结果等于 a[0] OR a[1] OR ... OR a[a.length - 1](下标从 0 开始)。Example
输入:nums = [3,1]
输出:2
解释:子集按位或能得到的最大值是 3 。有 2 个子集按位或可以得到 3 :
- [3]
- [3,1]
Leetcode-cn.com 2022-03-16
🔴 432.all-oone-data-structure
🏷️ Tags
#design #hash_table #linked_list #doubly_linked_list
Description
请你设计一个用于存储字符串计数的数据结构,并能够返回计数最小和最大的字符串。
实现
Example
🔴 432.all-oone-data-structure
🏷️ Tags
#design #hash_table #linked_list #doubly_linked_list
Description
请你设计一个用于存储字符串计数的数据结构,并能够返回计数最小和最大的字符串。
实现
AllOne 类:AllOne() 初始化数据结构的对象。inc(String key) 字符串 key 的计数增加 1 。如果数据结构中尚不存在 key ,那么插入计数为 1 的 key 。dec(String key) 字符串 key 的计数减少 1 。如果 key 的计数在减少后为 0 ,那么需要将这个 key 从数据结构中删除。测试用例保证:在减少计数前,key 存在于数据结构中。getMaxKey() 返回任意一个计数最大的字符串。如果没有元素存在,返回一个空字符串 "" 。getMinKey() 返回任意一个计数最小的字符串。如果没有元素存在,返回一个空字符串 "" 。Example
输入
["AllOne", "inc", "inc", "getMaxKey", "getMinKey", "inc", "getMaxKey", "getMinKey"]
[[], ["hello"], ["hello"], [], [], ["leet"], [], []]
输出
[null, null, null, "hello", "hello", null, "hello", "leet"]
解释
AllOne allOne = new AllOne();
allOne.inc("hello");
allOne.inc("hello");
allOne.getMaxKey(); // 返回 "hello"
allOne.getMinKey(); // 返回 "hello"
allOne.inc("leet");
allOne.getMaxKey(); // 返回 "hello"
allOne.getMinKey(); // 返回 "leet"
Leetcode-cn.com 2022-03-17
🟢 720.longest-word-in-dictionary
🏷️ Tags
#trie #array #hash_table #string #sorting
Description
给出一个字符串数组
若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。
Example
🟢 720.longest-word-in-dictionary
🏷️ Tags
#trie #array #hash_table #string #sorting
Description
给出一个字符串数组
words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。
Example
输入:words = ["w","wo","wor","worl", "world"]
输出:"world"
解释: 单词"world"可由"w", "wo", "wor", 和 "worl"逐步添加一个字母组成。
Leetcode-cn.com 2022-03-18
🟡 2043.simple-bank-system
🏷️ Tags
#design #array #hash_table #simulation
Description
你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有
请你执行所有 有效的 交易。如果满足下面全部条件,则交易 有效 :
指定的账户数量在
取款或者转账需要的钱的总数 小于或者等于 账户余额。
实现
Example
🟡 2043.simple-bank-system
🏷️ Tags
#design #array #hash_table #simulation
Description
你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有
n 个账户,编号从 1 到 n 。每个账号的初始余额存储在一个下标从 0 开始的整数数组 balance 中,其中第 (i + 1) 个账户的初始余额是 balance[i] 。请你执行所有 有效的 交易。如果满足下面全部条件,则交易 有效 :
指定的账户数量在
1 和 n 之间,且取款或者转账需要的钱的总数 小于或者等于 账户余额。
实现
Bank 类:Bank(long[] balance) 使用下标从 0 开始的整数数组 balance 初始化该对象。boolean transfer(int account1, int account2, long money) 从编号为 account1 的账户向编号为 account2 的账户转帐 money 美元。如果交易成功,返回 true ,否则,返回 false 。boolean deposit(int account, long money) 向编号为 account 的账户存款 money 美元。如果交易成功,返回 true ;否则,返回 false 。boolean withdraw(int account, long money) 从编号为 account 的账户取款 money 美元。如果交易成功,返回 true ;否则,返回 false 。Example
输入:
["Bank", "withdraw", "transfer", "deposit", "transfer", "withdraw"]
[[[10, 100, 20, 50, 30]], [3, 10], [5, 1, 20], [5, 20], [3, 4, 15], [10, 50]]
输出:
[null, true, true, true, false, false]
解释:
Bank bank = new Bank([10, 100, 20, 50, 30]);
bank.withdraw(3, 10); // 返回 true ,账户 3 的余额是 $20 ,所以可以取款 $10 。
// 账户 3 余额为 $20 - $10 = $10 。
bank.transfer(5, 1, 20); // 返回 true ,账户 5 的余额是 $30 ,所以可以转账 $20 。
// 账户 5 的余额为 $30 - $20 = $10 ,账户 1 的余额为 $10 + $20 = $30 。
bank.deposit(5, 20); // 返回 true ,可以向账户 5 存款 $20 。
// 账户 5 的余额为 $10 + $20 = $30 。
bank.transfer(3, 4, 15); // 返回 false ,账户 3 的当前余额是 $10 。
// 所以无法转账 $15 。
bank.withdraw(10, 50); // 返回 false ,交易无效,因为账户 10 并不存在。
Leetcode-cn.com 2022-03-20
🟡 2039.the-time-when-the-network-becomes-idle
🏷️ Tags
#breadth_first_search #graph #array
Description
给你一个有
题目保证所有服务器都是 相通 的,也就是说一个信息从任意服务器出发,都可以通过这些信息线路直接或间接地到达任何其他服务器。
编号为
在
如果还没收到任何回复信息,那么该服务器会周期性 重发 信息。数据服务器
否则,该数据服务器 不会重发 信息。
当没有任何信息在线路上传输或者到达某服务器时,该计算机网络变为 空闲 状态。
请返回计算机网络变为 空闲 状态的 最早秒数 。
Example
🟡 2039.the-time-when-the-network-becomes-idle
🏷️ Tags
#breadth_first_search #graph #array
Description
给你一个有
n 个服务器的计算机网络,服务器编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示服务器 ui 和 vi 之间有一条信息线路,在 一秒 内它们之间可以传输 任意 数目的信息。再给你一个长度为 n 且下标从 0 开始的整数数组 patience 。题目保证所有服务器都是 相通 的,也就是说一个信息从任意服务器出发,都可以通过这些信息线路直接或间接地到达任何其他服务器。
编号为
0 的服务器是 主 服务器,其他服务器为 数据 服务器。每个数据服务器都要向主服务器发送信息,并等待回复。信息在服务器之间按 最优 线路传输,也就是说每个信息都会以 最少时间 到达主服务器。主服务器会处理 所有 新到达的信息并 立即 按照每条信息来时的路线 反方向 发送回复信息。在
0 秒的开始,所有数据服务器都会发送各自需要处理的信息。从第 1 秒开始,每 一秒最 开始 时,每个数据服务器都会检查它是否收到了主服务器的回复信息(包括新发出信息的回复信息):如果还没收到任何回复信息,那么该服务器会周期性 重发 信息。数据服务器
i 每 patience[i] 秒都会重发一条信息,也就是说,数据服务器 i 在上一次发送信息给主服务器后的 patience[i] 秒 后 会重发一条信息给主服务器。否则,该数据服务器 不会重发 信息。
当没有任何信息在线路上传输或者到达某服务器时,该计算机网络变为 空闲 状态。
请返回计算机网络变为 空闲 状态的 最早秒数 。
Example
输入:edges = [[0,1],[1,2]], patience = [0,2,1]
输出:8
解释:
0 秒最开始时,
- 数据服务器 1 给主服务器发出信息(用 1A 表示)。
- 数据服务器 2 给主服务器发出信息(用 2A 表示)。
1 秒时,
- 信息 1A 到达主服务器,主服务器立刻处理信息 1A 并发出 1A 的回复信息。
- 数据服务器 1 还没收到任何回复。距离上次发出信息过去了 1 秒(1 < patience[1] = 2),所以不会重发信息。
- 数据服务器 2 还没收到任何回复。距离上次发出信息过去了 1 秒(1 == patience[2] = 1),所以它重发一条信息(用 2B 表示)。
2 秒时,
- 回复信息 1A 到达服务器 1 ,服务器 1 不会再重发信息。
- 信息 2A 到达主服务器,主服务器立刻处理信息 2A 并发出 2A 的回复信息。
- 服务器 2 重发一条信息(用 2C 表示)。
...
4 秒时,
- 回复信息 2A 到达服务器 2 ,服务器 2 不会再重发信息。
...
7 秒时,回复信息 2D 到达服务器 2 。
从第 8 秒开始,不再有任何信息在服务器之间传输,也不再有信息到达服务器。
所以第 8 秒是网络变空闲的最早时刻。
Leetcode-cn.com 2022-03-21
🟢 653.two-sum-iv-input-is-a-bst
🏷️ Tags
#tree #depth_first_search #breadth_first_search #binary_search_tree #hash_table #two_pointers #binary_tree
Description
给定一个二叉搜索树
Example
🟢 653.two-sum-iv-input-is-a-bst
🏷️ Tags
#tree #depth_first_search #breadth_first_search #binary_search_tree #hash_table #two_pointers #binary_tree
Description
给定一个二叉搜索树
root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。Example
输入: root = [5,3,6,2,4,null,7], k = 9
输出: true
Leetcode-cn.com 2022-03-22
🟡 2038.remove-colored-pieces-if-both-neighbors-are-the-same-color
🏷️ Tags
#greedy #math #string #game_theory
Description
总共有
Alice 和 Bob 在玩一个游戏,他们 轮流 从这个字符串中删除颜色。Alice 先手 。
如果一个颜色片段为
如果一个颜色片段为
Alice 和 Bob 不能 从字符串两端删除颜色片段。
如果其中一人无法继续操作,则该玩家 输 掉游戏且另一玩家 获胜 。
假设 Alice 和 Bob 都采用最优策略,如果 Alice 获胜,请返回
Example
🟡 2038.remove-colored-pieces-if-both-neighbors-are-the-same-color
🏷️ Tags
#greedy #math #string #game_theory
Description
总共有
n 个颜色片段排成一列,每个颜色片段要么是 'A' 要么是 'B' 。给你一个长度为 n 的字符串 colors ,其中 colors[i] 表示第 i 个颜色片段的颜色。Alice 和 Bob 在玩一个游戏,他们 轮流 从这个字符串中删除颜色。Alice 先手 。
如果一个颜色片段为
'A' 且 相邻两个颜色 都是颜色 'A' ,那么 Alice 可以删除该颜色片段。Alice 不可以 删除任何颜色 'B' 片段。如果一个颜色片段为
'B' 且 相邻两个颜色 都是颜色 'B' ,那么 Bob 可以删除该颜色片段。Bob 不可以 删除任何颜色 'A' 片段。Alice 和 Bob 不能 从字符串两端删除颜色片段。
如果其中一人无法继续操作,则该玩家 输 掉游戏且另一玩家 获胜 。
假设 Alice 和 Bob 都采用最优策略,如果 Alice 获胜,请返回
true,否则 Bob 获胜,返回 false。Example
输入:colors = "AAABABB"
输出:true
解释:
AAABABB -> AABABB
Alice 先操作。
她删除从左数第二个 'A' ,这也是唯一一个相邻颜色片段都是 'A' 的 'A' 。
现在轮到 Bob 操作。
Bob 无法执行任何操作,因为没有相邻位置都是 'B' 的颜色片段 'B' 。
因此,Alice 获胜,返回 true 。
Leetcode-cn.com 2022-03-23
🔴 440.k-th-smallest-in-lexicographical-order
🏷️ Tags
#trie
Description
给定整数
Example
🔴 440.k-th-smallest-in-lexicographical-order
🏷️ Tags
#trie
Description
给定整数
n 和 k,返回 [1, n] 中字典序第 k 小的数字。Example
输入: n = 13, k = 2
输出: 10
解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。