Leetcode-cn.com 2021-11-12
🟡 375.guess-number-higher-or-lower-ii
🏷️ Tags
#math #dynamic_programming #game_theory
Description
我们正在玩一个猜数游戏,游戏规则如下:
我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。
每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。
然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。
undefined
🟡 375.guess-number-higher-or-lower-ii
🏷️ Tags
#math #dynamic_programming #game_theory
Description
我们正在玩一个猜数游戏,游戏规则如下:
我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。
每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。
然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。
undefined
Leetcode-cn.com 2021-11-13
🟢 520.detect-capital
🏷️ Tags
#string
Description
我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如
单词中所有字母都不是大写,比如
如果单词不只含有一个字母,只有首字母大写, 比如
给你一个字符串
Example
🟢 520.detect-capital
🏷️ Tags
#string
Description
我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如
"USA" 。单词中所有字母都不是大写,比如
"leetcode" 。如果单词不只含有一个字母,只有首字母大写, 比如
"Google" 。给你一个字符串
word 。如果大写用法正确,返回 true ;否则,返回 false 。Example
输入:word = "USA"
输出:true
Leetcode-cn.com 2021-11-14
🟡 677.map-sum-pairs
🏷️ Tags
#design #trie #hash_table #string
Description
实现一个
Example
🟡 677.map-sum-pairs
🏷️ Tags
#design #trie #hash_table #string
Description
实现一个
MapSum 类,支持两个方法,insert 和 sum:MapSum() 初始化 MapSum 对象void insert(String key, int val) 插入 key-val 键值对,字符串表示键 key ,整数表示值 val 。如果键 key 已经存在,那么原来的键值对将被替代成新的键值对。int sum(string prefix) 返回所有以该前缀 prefix 开头的键 key 的值的总和。Example
输入:
["MapSum", "insert", "sum", "insert", "sum"]
[[], ["apple", 3], ["ap"], ["app", 2], ["ap"]]
输出:
[null, null, 3, null, 5]
解释:
MapSum mapSum = new MapSum();
mapSum.insert("apple", 3);
mapSum.sum("ap"); // return 3 (apple = 3)
mapSum.insert("app", 2);
mapSum.sum("ap"); // return 5 (apple + app = 3 + 2 = 5)
Leetcode-cn.com 2021-11-15
🟡 319.bulb-switcher
🏷️ Tags
#brainteaser #math
Description
初始时有
第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第
找出并返回
Example
🟡 319.bulb-switcher
🏷️ Tags
#brainteaser #math
Description
初始时有
n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第
i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。找出并返回
n 轮后有多少个亮着的灯泡。Example
输入:n = 3
输出:1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].
你应该返回 1,因为只有一个灯泡还亮着。
Leetcode-cn.com 2021-11-16
🔴 391.perfect-rectangle
🏷️ Tags
#array #line_sweep
Description
给你一个数组
如果所有矩形一起精确覆盖了某个矩形区域,则返回
Example
🔴 391.perfect-rectangle
🏷️ Tags
#array #line_sweep
Description
给你一个数组
rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。如果所有矩形一起精确覆盖了某个矩形区域,则返回
true ;否则,返回 false 。Example
输入:rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]]
输出:true
解释:5 个矩形一起可以精确地覆盖一个矩形区域。
Leetcode-cn.com 2021-11-18
🟢 563.binary-tree-tilt
🏷️ Tags
#tree #depth_first_search #binary_tree
Description
给定一个二叉树,计算 整个树 的坡度 。
一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。
整个树 的坡度就是其所有节点的坡度之和。
Example
🟢 563.binary-tree-tilt
🏷️ Tags
#tree #depth_first_search #binary_tree
Description
给定一个二叉树,计算 整个树 的坡度 。
一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。
整个树 的坡度就是其所有节点的坡度之和。
Example
输入:root = [1,2,3]
输出:1
解释:
节点 2 的坡度:|0-0| = 0(没有子节点)
节点 3 的坡度:|0-0| = 0(没有子节点)
节点 1 的坡度:|2-3| = 1(左子树就是左子节点,所以和是 2 ;右子树就是右子节点,所以和是 3 )
坡度总和:0 + 0 + 1 = 1
Leetcode-cn.com 2021-11-19
🟡 397.integer-replacement
🏷️ Tags
#greedy #bit_manipulation #memoization #dynamic_programming
Description
给定一个正整数
如果
如果
Example
🟡 397.integer-replacement
🏷️ Tags
#greedy #bit_manipulation #memoization #dynamic_programming
Description
给定一个正整数
n ,你可以做如下操作:如果
n 是偶数,则用 n / 2替换 n 。如果
n 是奇数,则可以用 n + 1或n - 1替换 n 。n 变为 1 所需的最小替换次数是多少?Example
输入:n = 8
输出:3
解释:8 -> 4 -> 2 -> 1
Leetcode-cn.com 2021-11-20
🟢 594.longest-harmonious-subsequence
🏷️ Tags
#array #hash_table #sorting
Description
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是
现在,给你一个整数数组
数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
Example
🟢 594.longest-harmonious-subsequence
🏷️ Tags
#array #hash_table #sorting
Description
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是
1 。现在,给你一个整数数组
nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
Example
输入:nums = [1,3,2,2,5,2,3,7]
输出:5
解释:最长的和谐子序列是 [3,2,2,2,3]
Leetcode-cn.com 2021-11-22
🟡 384.shuffle-an-array
🏷️ Tags
#array #math #randomized
Description
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。
实现
Example
🟡 384.shuffle-an-array
🏷️ Tags
#array #math #randomized
Description
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。
实现
Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[] shuffle() 返回数组随机打乱后的结果Example
输入
["Solution", "shuffle", "reset", "shuffle"]
[[[1, 2, 3]], [], [], []]
输出
[null, [3, 1, 2], [1, 2, 3], [1, 3, 2]]
解释
Solution solution = new Solution([1, 2, 3]);
solution.shuffle(); // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。例如,返回 [3, 1, 2]
solution.reset(); // 重设数组到它的初始状态 [1, 2, 3] 。返回 [1, 2, 3]
solution.shuffle(); // 随机返回数组 [1, 2, 3] 打乱后的结果。例如,返回 [1, 3, 2]
Leetcode-cn.com 2021-11-23
🟢 859.buddy-strings
🏷️ Tags
#hash_table #string
Description
给你两个字符串
交换字母的定义是:取两个下标
例如,在
Example
🟢 859.buddy-strings
🏷️ Tags
#hash_table #string
Description
给你两个字符串
s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。交换字母的定义是:取两个下标
i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。例如,在
"abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。Example
输入:s = "ab", goal = "ba"
输出:true
解释:你可以交换 s[0] = 'a' 和 s[1] = 'b' 生成 "ba",此时 s 和 goal 相等。
Leetcode-cn.com 2021-11-24
🟡 423.reconstruct-original-digits-from-english
🏷️ Tags
#hash_table #math #string
Description
给你一个字符串
Example
🟡 423.reconstruct-original-digits-from-english
🏷️ Tags
#hash_table #math #string
Description
给你一个字符串
s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。Example
输入:s = "owoztneoer"
输出:"012"
Leetcode-cn.com 2021-11-25
🔴 458.poor-pigs
🏷️ Tags
#math #dynamic_programming #combinatorics
Description
有
喂猪的规则如下:
选择若干活猪进行喂养
可以允许小猪同时饮用任意数量的桶中的水,并且该过程不需要时间。
小猪喝完水后,必须有
过了
重复这一过程,直到时间用完。
给你桶的数目
Example
🔴 458.poor-pigs
🏷️ Tags
#math #dynamic_programming #combinatorics
Description
有
buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有 minutesToTest 分钟时间来确定哪桶液体是有毒的。喂猪的规则如下:
选择若干活猪进行喂养
可以允许小猪同时饮用任意数量的桶中的水,并且该过程不需要时间。
小猪喝完水后,必须有
minutesToDie 分钟的冷却时间。在这段时间里,你只能观察,而不允许继续喂猪。过了
minutesToDie 分钟后,所有喝到毒药的猪都会死去,其他所有猪都会活下来。重复这一过程,直到时间用完。
给你桶的数目
buckets ,minutesToDie 和 minutesToTest ,返回在规定时间内判断哪个桶有毒所需的 最小 猪数。Example
输入:buckets = 1000, minutesToDie = 15, minutesToTest = 60
输出:5
Leetcode-cn.com 2021-11-26
🟢 700.search-in-a-binary-search-tree
🏷️ Tags
#tree #binary_search_tree #binary_tree
Description
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
例如,
你应该返回如下子树:
在上述undefined
🟢 700.search-in-a-binary-search-tree
🏷️ Tags
#tree #binary_search_tree #binary_tree
Description
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
例如,
给定二叉搜索树:
4
/ \
2 7
/ \
1 3
和值: 2
你应该返回如下子树:
2
/ \
1 3
在上述undefined
Leetcode-cn.com 2021-11-27
🟡 519.random-flip-matrix
🏷️ Tags
#reservoir_sampling #hash_table #math #randomized
Description
给你一个
尽量最少调用内置的随机函数,并且优化时间和空间复杂度。
实现
Example
🟡 519.random-flip-matrix
🏷️ Tags
#reservoir_sampling #hash_table #math #randomized
Description
给你一个
m x n 的二元矩阵 matrix ,且所有值被初始化为 0 。请你设计一个算法,随机选取一个满足 matrix[i][j] == 0 的下标 (i, j) ,并将它的值变为 1 。所有满足 matrix[i][j] == 0 的下标 (i, j) 被选取的概率应当均等。尽量最少调用内置的随机函数,并且优化时间和空间复杂度。
实现
Solution 类:Solution(int m, int n) 使用二元矩阵的大小 m 和 n 初始化该对象int[] flip() 返回一个满足 matrix[i][j] == 0 的随机下标 [i, j] ,并将其对应格子中的值变为 1void reset() 将矩阵中所有的值重置为 0Example
输入
["Solution", "flip", "flip", "flip", "reset", "flip"]
[[3, 1], [], [], [], [], []]
输出
[null, [1, 0], [2, 0], [0, 0], null, [2, 0]]
解释
Solution solution = new Solution(3, 1);
solution.flip(); // 返回 [1, 0],此时返回 [0,0]、[1,0] 和 [2,0] 的概率应当相同
solution.flip(); // 返回 [2, 0],因为 [1,0] 已经返回过了,此时返回 [2,0] 和 [0,0] 的概率应当相同
solution.flip(); // 返回 [0, 0],根据前面已经返回过的下标,此时只能返回 [0,0]
solution.reset(); // 所有值都重置为 0 ,并可以再次选择下标返回
solution.flip(); // 返回 [2, 0],此时返回 [0,0]、[1,0] 和 [2,0] 的概率应当相同
Leetcode-cn.com 2021-11-28
🟡 438.find-all-anagrams-in-a-string
🏷️ Tags
#hash_table #string #sliding_window
Description
给定两个字符串
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
Example
🟡 438.find-all-anagrams-in-a-string
🏷️ Tags
#hash_table #string #sliding_window
Description
给定两个字符串
s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
Example
输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。
Leetcode-cn.com 2021-11-30
🟡 400.nth-digit
🏷️ Tags
#math #binary_search
Description
给你一个整数
Example
🟡 400.nth-digit
🏷️ Tags
#math #binary_search
Description
给你一个整数
n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位数字。Example
输入:n = 3
输出:3
Leetcode-cn.com 2021-12-01
🟢 1446.consecutive-characters
🏷️ Tags
#string
Description
给你一个字符串
请你返回字符串的能量。
Example
🟢 1446.consecutive-characters
🏷️ Tags
#string
Description
给你一个字符串
s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。
Example
输入:s = "leetcode"
输出:2
解释:子字符串 "ee" 长度为 2 ,只包含字符 'e' 。
Leetcode-cn.com 2021-12-02
🟢 506.relative-ranks
🏷️ Tags
#array #sorting #heap_priority_queue
Description
给你一个长度为
运动员将根据得分 决定名次 ,其中名次第
名次第
名次第
名次第
从名次第
使用长度为
Example
🟢 506.relative-ranks
🏷️ Tags
#array #sorting #heap_priority_queue
Description
给你一个长度为
n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。运动员将根据得分 决定名次 ,其中名次第
1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况:名次第
1 的运动员获金牌 "Gold Medal" 。名次第
2 的运动员获银牌 "Silver Medal" 。名次第
3 的运动员获铜牌 "Bronze Medal" 。从名次第
4 到第 n 的运动员,只能获得他们的名次编号(即,名次第 x 的运动员获得编号 "x")。使用长度为
n 的数组 answer 返回获奖,其中 answer[i] 是第 i 位运动员的获奖情况。Example
输入:score = [5,4,3,2,1]
输出:["Gold Medal","Silver Medal","Bronze Medal","4","5"]
解释:名次为 [1st, 2nd, 3rd, 4th, 5th] 。
Leetcode-cn.com 2021-12-03
🟢 1005.maximize-sum-of-array-after-k-negations
🏷️ Tags
#greedy #array #sorting
Description
给你一个整数数组
选择某个下标
重复这个过程恰好
以这种方式修改数组后,返回数组 可能的最大和 。
Example
🟢 1005.maximize-sum-of-array-after-k-negations
🏷️ Tags
#greedy #array #sorting
Description
给你一个整数数组
nums 和一个整数 k ,按以下方法修改该数组:选择某个下标
i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好
k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组 可能的最大和 。
Example
输入:nums = [4,2,3], k = 1
输出:5
解释:选择下标 1 ,nums 变为 [4,-2,3] 。
Leetcode-cn.com 2021-12-04
🟢 383.ransom-note
🏷️ Tags
#hash_table #string #counting
Description
为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。
给你一个赎金信 (
如果可以构成,返回
Example
🟢 383.ransom-note
🏷️ Tags
#hash_table #string #counting
Description
为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。
给你一个赎金信 (
ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。如果可以构成,返回
true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。Example
输入:ransomNote = "a", magazine = "b"
输出:false
Leetcode-cn.com 2021-12-05
🟡 372.super-pow
🏷️ Tags
#math #divide_and_conquer
Description
你的任务是计算
Example
🟡 372.super-pow
🏷️ Tags
#math #divide_and_conquer
Description
你的任务是计算
ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。Example
输入:a = 2, b = [3]
输出:8