Leetcode-cn.com 2022-01-26
🟡 2013.detect-squares
🏷️ Tags
#design #array #hash_table #counting
Description
给你一个在 X-Y 平面上的点构成的数据流。设计一个满足下述要求的算法:
添加 一个在数据流中的新点到某个数据结构中。可以添加 重复 的点,并会视作不同的点进行处理。
给你一个查询点,请你从数据结构中选出三个点,使这三个点和查询点一同构成一个 面积为正 的 轴对齐正方形 ,统计 满足该要求的方案数目。
轴对齐正方形 是一个正方形,除四条边长度相同外,还满足每条边都与 x-轴 或 y-轴 平行或垂直。
实现
Example
🟡 2013.detect-squares
🏷️ Tags
#design #array #hash_table #counting
Description
给你一个在 X-Y 平面上的点构成的数据流。设计一个满足下述要求的算法:
添加 一个在数据流中的新点到某个数据结构中。可以添加 重复 的点,并会视作不同的点进行处理。
给你一个查询点,请你从数据结构中选出三个点,使这三个点和查询点一同构成一个 面积为正 的 轴对齐正方形 ,统计 满足该要求的方案数目。
轴对齐正方形 是一个正方形,除四条边长度相同外,还满足每条边都与 x-轴 或 y-轴 平行或垂直。
实现
DetectSquares 类:DetectSquares() 使用空数据结构初始化对象void add(int[] point) 向数据结构添加一个新的点 point = [x, y]int count(int[] point) 统计按上述方式与点 point = [x, y] 共同构造 轴对齐正方形 的方案数。Example
输入:
["DetectSquares", "add", "add", "add", "count", "count", "add", "count"]
[[], [[3, 10]], [[11, 2]], [[3, 2]], [[11, 10]], [[14, 8]], [[11, 2]], [[11, 10]]]
输出:
[null, null, null, null, 1, 0, null, 2]
解释:
DetectSquares detectSquares = new DetectSquares();
detectSquares.add([3, 10]);
detectSquares.add([11, 2]);
detectSquares.add([3, 2]);
detectSquares.count([11, 10]); // 返回 1 。你可以选择:
// - 第一个,第二个,和第三个点
detectSquares.count([14, 8]); // 返回 0 。查询点无法与数据结构中的这些点构成正方形。
detectSquares.add([11, 2]); // 允许添加重复的点。
detectSquares.count([11, 10]); // 返回 2 。你可以选择:
// - 第一个,第二个,和第三个点
// - 第一个,第三个,和第四个点
Leetcode-cn.com 2022-01-27
🟢 2047.number-of-valid-words-in-a-sentence
🏷️ Tags
#string
Description
句子仅由小写字母(
如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:
仅由小写字母、连字符和/或标点(不含数字)。
至多一个 连字符
至多一个 标点符号。如果存在,标点符号应当位于 token 的 末尾 。
这里给出几个有效单词的例子:
给你一个字符串
Example
🟢 2047.number-of-valid-words-in-a-sentence
🏷️ Tags
#string
Description
句子仅由小写字母(
'a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:
仅由小写字母、连字符和/或标点(不含数字)。
至多一个 连字符
'-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有效单词,但 "-ab" 和 "ab-" 不是有效单词)。至多一个 标点符号。如果存在,标点符号应当位于 token 的 末尾 。
这里给出几个有效单词的例子:
"a-b."、"afad"、"ba-c"、"a!" 和 "!" 。给你一个字符串
sentence ,请你找出并返回 sentence 中 有效单词的数目 。Example
输入:sentence = "cat and dog"
输出:3
解释:句子中的有效单词是 "cat"、"and" 和 "dog"
Leetcode-cn.com 2022-01-28
🟡 1996.the-number-of-weak-characters-in-the-game
🏷️ Tags
#stack #greedy #array #sorting #monotonic_stack
Description
你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组
如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色
返回 弱角色 的数量。
Example
🟡 1996.the-number-of-weak-characters-in-the-game
🏷️ Tags
#stack #greedy #array #sorting #monotonic_stack
Description
你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组
properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色
i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defensei 。返回 弱角色 的数量。
Example
输入:properties = [[5,5],[6,3],[3,6]]
输出:0
解释:不存在攻击和防御都严格高于其他角色的角色。
Leetcode-cn.com 2022-01-29
🟡 1765.map-of-highest-peak
🏷️ Tags
#breadth_first_search #array #matrix
Description
给你一个大小为
如果
如果
你需要按照如下规则给每个单元格安排高度:
每个格子的高度都必须是非负的。
如果一个格子是是 水域 ,那么它的高度必须为
任意相邻的格子高度差 至多 为
找到一种安排高度的方案,使得矩阵中的最高高度值 最大 。
请你返回一个大小为
Example
🟡 1765.map-of-highest-peak
🏷️ Tags
#breadth_first_search #array #matrix
Description
给你一个大小为
m x n 的整数矩阵 isWater ,它代表了一个由 陆地 和 水域 单元格组成的地图。如果
isWater[i][j] == 0 ,格子 (i, j) 是一个 陆地 格子。如果
isWater[i][j] == 1 ,格子 (i, j) 是一个 水域 格子。你需要按照如下规则给每个单元格安排高度:
每个格子的高度都必须是非负的。
如果一个格子是是 水域 ,那么它的高度必须为
0 。任意相邻的格子高度差 至多 为
1 。当两个格子在正东、南、西、北方向上相互紧挨着,就称它们为相邻的格子。(也就是说它们有一条公共边)找到一种安排高度的方案,使得矩阵中的最高高度值 最大 。
请你返回一个大小为
m x n 的整数矩阵 height ,其中 height[i][j] 是格子 (i, j) 的高度。如果有多种解法,请返回 任意一个 。Example
输入:isWater = [[0,1],[0,0]]
输出:[[1,0],[2,1]]
解释:上图展示了给各个格子安排的高度。
蓝色格子是水域格,绿色格子是陆地格。
Leetcode-cn.com 2022-01-30
🟢 884.uncommon-words-from-two-sentences
🏷️ Tags
#hash_table #string
Description
句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。
如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。
给你两个 句子
Example
🟢 884.uncommon-words-from-two-sentences
🏷️ Tags
#hash_table #string
Description
句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。
如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。
给你两个 句子
s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。Example
输入:s1 = "this apple is sweet", s2 = "this apple is sour"
输出:["sweet","sour"]
Leetcode-cn.com 2022-01-31
🟢 1342.number-of-steps-to-reduce-a-number-to-zero
🏷️ Tags
#bit_manipulation #math
Description
给你一个非负整数
Example
🟢 1342.number-of-steps-to-reduce-a-number-to-zero
🏷️ Tags
#bit_manipulation #math
Description
给你一个非负整数
num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。Example
输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 2) 7 是奇数,减 1 得到 6 。
步骤 3) 6 是偶数,除以 2 得到 3 。
步骤 4) 3 是奇数,减 1 得到 2 。
步骤 5) 2 是偶数,除以 2 得到 1 。
步骤 6) 1 是奇数,减 1 得到 0 。
Leetcode-cn.com 2022-02-01
🟢 1763.longest-nice-substring
🏷️ Tags
#bit_manipulation #hash_table #string #sliding_window
Description
当一个字符串
给你一个字符串
Example
🟢 1763.longest-nice-substring
🏷️ Tags
#bit_manipulation #hash_table #string #sliding_window
Description
当一个字符串
s 包含的每一种字母的大写和小写形式 同时 出现在 s 中,就称这个字符串 s 是 美好 字符串。比方说,"abABB" 是美好字符串,因为 'A' 和 'a' 同时出现了,且 'B' 和 'b' 也同时出现了。然而,"abA" 不是美好字符串因为 'b' 出现了,而 'B' 没有出现。给你一个字符串
s ,请你返回 s 最长的 美好子字符串 。如果有多个答案,请你返回 最早 出现的一个。如果不存在美好子字符串,请你返回一个空字符串。Example
输入:s = "YazaAay"
输出:"aAa"
解释:"aAa" 是一个美好字符串,因为这个子串中仅含一种字母,其小写形式 'a' 和大写形式 'A' 也同时出现了。
"aAa" 是最长的美好子字符串。
Leetcode-cn.com 2022-02-02
🟢 2000.reverse-prefix-of-word
🏷️ Tags
#two_pointers #string
Description
给你一个下标从 0 开始的字符串
例如,如果
返回 结果字符串 。
Example
🟢 2000.reverse-prefix-of-word
🏷️ Tags
#two_pointers #string
Description
给你一个下标从 0 开始的字符串
word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。例如,如果
word = "abcdefd" 且 ch = "d" ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 "dcbaefd" 。返回 结果字符串 。
Example
输入:word = "abcdefd", ch = "d"
输出:"dcbaefd"
解释:"d" 第一次出现在下标 3 。
反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "dcbaefd" 。
Leetcode-cn.com 2022-02-03
🟡 1414.find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k
🏷️ Tags
#greedy
Description
给你数字
斐波那契数字定义为:
F1 = 1
F2 = 1
Fn = Fn-1 + Fn-2 , 其中 n > 2 。
数据保证对于给定的
Example
🟡 1414.find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k
🏷️ Tags
#greedy
Description
给你数字
k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。斐波那契数字定义为:
F1 = 1
F2 = 1
Fn = Fn-1 + Fn-2 , 其中 n > 2 。
数据保证对于给定的
k ,一定能找到可行解。Example
输入:k = 7
输出:2
解释:斐波那契数字为:1,1,2,3,5,8,13,……
对于 k = 7 ,我们可以得到 2 + 5 = 7 。
Leetcode-cn.com 2022-02-05
🟡 1219.path-with-maximum-gold
🏷️ Tags
#array #backtracking #matrix
Description
你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为
为了使收益最大化,矿工需要按以下规则来开采黄金:
每当矿工进入一个单元,就会收集该单元格中的所有黄金。
矿工每次可以从当前位置向上下左右四个方向走。
每个单元格只能被开采(进入)一次。
不得开采(进入)黄金数目为
矿工可以从网格中 任意一个 有黄金的单元格出发或者是停止。
Example
🟡 1219.path-with-maximum-gold
🏷️ Tags
#array #backtracking #matrix
Description
你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为
m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0。为了使收益最大化,矿工需要按以下规则来开采黄金:
每当矿工进入一个单元,就会收集该单元格中的所有黄金。
矿工每次可以从当前位置向上下左右四个方向走。
每个单元格只能被开采(进入)一次。
不得开采(进入)黄金数目为
0 的单元格。矿工可以从网格中 任意一个 有黄金的单元格出发或者是停止。
Example
输入:grid = [[0,6,0],[5,8,7],[0,9,0]]
输出:24
解释:
[[0,6,0],
[5,8,7],
[0,9,0]]
一种收集最多黄金的路线是:9 -> 8 -> 7。
Leetcode-cn.com 2022-02-06
🟢 1748.sum-of-unique-elements
🏷️ Tags
#array #hash_table #counting
Description
给你一个整数数组
请你返回
Example
🟢 1748.sum-of-unique-elements
🏷️ Tags
#array #hash_table #counting
Description
给你一个整数数组
nums 。数组中唯一元素是那些只出现 恰好一次 的元素。请你返回
nums 中唯一元素的 和 。Example
输入:nums = [1,2,3,2]
输出:4
解释:唯一元素为 [1,3] ,和为 4 。
Leetcode-cn.com 2022-02-07
🟡 1405.longest-happy-string
🏷️ Tags
#greedy #string #heap_priority_queue
Description
如果字符串中不含有任何
给你三个整数
如果不存在这样的字符串
Example
🟡 1405.longest-happy-string
🏷️ Tags
#greedy #string #heap_priority_queue
Description
如果字符串中不含有任何
'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数
a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:s 是一个尽可能长的快乐字符串。s 中 最多 有a 个字母 'a'、b 个字母 'b'、c 个字母 'c' 。s 中只含有 'a'、'b' 、'c' 三种字母。如果不存在这样的字符串
s ,请返回一个空字符串 ""。Example
输入:a = 1, b = 1, c = 7
输出:"ccaccbcc"
解释:"ccbccacc" 也是一种正确答案。
Leetcode-cn.com 2022-02-08
🔴 1001.grid-illumination
🏷️ Tags
#array #hash_table
Description
在大小为
给你一个由灯的位置组成的二维数组
当一盏灯处于打开状态,它将会照亮 自身所在单元格 以及同一 行 、同一 列 和两条 对角线 上的 所有其他单元格 。
另给你一个二维数组
返回一个整数数组
Example
🔴 1001.grid-illumination
🏷️ Tags
#array #hash_table
Description
在大小为
n x n 的网格 grid 上,每个单元格都有一盏灯,最初灯都处于 关闭 状态。给你一个由灯的位置组成的二维数组
lamps ,其中 lamps[i] = [rowi, coli] 表示 打开 位于 grid[rowi][coli] 的灯。即便同一盏灯可能在 lamps 中多次列出,不会影响这盏灯处于 打开 状态。当一盏灯处于打开状态,它将会照亮 自身所在单元格 以及同一 行 、同一 列 和两条 对角线 上的 所有其他单元格 。
另给你一个二维数组
queries ,其中 queries[j] = [rowj, colj] 。对于第 j 个查询,如果单元格 [rowj, colj] 是被照亮的,则查询结果为 1 ,否则为 0 。在第 j 次查询之后 [按照查询的顺序] ,关闭 位于单元格 grid[rowj][colj] 上及相邻 8 个方向上(与单元格 grid[rowi][coli] 共享角或边)的任何灯。返回一个整数数组
ans 作为答案, ans[j] 应等于第 j 次查询 queries[j] 的结果,1 表示照亮,0 表示未照亮。Example
输入:n = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,0]]
输出:[1,0]
解释:最初所有灯都是关闭的。在执行查询之前,打开位于 [0, 0] 和 [4, 4] 的灯。第 0 次查询检查 grid[1][1] 是否被照亮(蓝色方框)。该单元格被照亮,所以 ans[0] = 1 。然后,关闭红色方框中的所有灯。
第 1 次查询检查 grid[1][0] 是否被照亮(蓝色方框)。该单元格没有被照亮,所以 ans[1] = 0 。然后,关闭红色矩形中的所有灯。
Leetcode-cn.com 2022-02-09
🟢 2006.count-number-of-pairs-with-absolute-difference-k
🏷️ Tags
#array #hash_table #counting
Description
给你一个整数数组
如果
如果
Example
🟢 2006.count-number-of-pairs-with-absolute-difference-k
🏷️ Tags
#array #hash_table #counting
Description
给你一个整数数组
nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。|x| 的值定义为:如果
x >= 0 ,那么值为 x 。如果
x < 0 ,那么值为 -x 。Example
输入:nums = [1,2,2,1], k = 1
输出:4
解释:差的绝对值为 1 的数对为:
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
Leetcode-cn.com 2022-02-10
🟡 1447.simplified-fractions
🏷️ Tags
#math #string #number_theory
Description
给你一个整数
Example
🟡 1447.simplified-fractions
🏷️ Tags
#math #string #number_theory
Description
给你一个整数
n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 。分数可以以 任意 顺序返回。Example
输入:n = 2
输出:["1/2"]
解释:"1/2" 是唯一一个分母小于等于 2 的最简分数。
Leetcode-cn.com 2022-02-11
🟢 1984.minimum-difference-between-highest-and-lowest-of-k-scores
🏷️ Tags
#array #sorting #sliding_window
Description
给你一个 下标从 0 开始 的整数数组
从数组中选出任意
返回可能的 最小差值 。
Example
🟢 1984.minimum-difference-between-highest-and-lowest-of-k-scores
🏷️ Tags
#array #sorting #sliding_window
Description
给你一个 下标从 0 开始 的整数数组
nums ,其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。从数组中选出任意
k 名学生的分数,使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。返回可能的 最小差值 。
Example
输入:nums = [90], k = 1
输出:0
解释:选出 1 名学生的分数,仅有 1 种方法:
- [90] 最高分和最低分之间的差值是 90 - 90 = 0
可能的最小差值是 0
Leetcode-cn.com 2022-02-12
🟡 1020.number-of-enclaves
🏷️ Tags
#depth_first_search #breadth_first_search #union_find #array #matrix
Description
给你一个大小为
一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过
返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。
Example
🟡 1020.number-of-enclaves
🏷️ Tags
#depth_first_search #breadth_first_search #union_find #array #matrix
Description
给你一个大小为
m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过
grid 的边界。返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。
Example
输入:grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
输出:3
解释:有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。
Leetcode-cn.com 2022-02-13
🟢 1189.maximum-number-of-balloons
🏷️ Tags
#hash_table #string #counting
Description
给你一个字符串
字符串
Example
🟢 1189.maximum-number-of-balloons
🏷️ Tags
#hash_table #string #counting
Description
给你一个字符串
text,你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"(气球)。字符串
text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。Example
输入:text = "nlaebolko"
输出:1
Leetcode-cn.com 2022-02-14
🟡 540.single-element-in-a-sorted-array
🏷️ Tags
#array #binary_search
Description
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足
Example
🟡 540.single-element-in-a-sorted-array
🏷️ Tags
#array #binary_search
Description
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足
O(log n) 时间复杂度和 O(1) 空间复杂度。Example
输入: nums = [1,1,2,3,3,4,4,8,8]
输出: 2
Leetcode-cn.com 2022-02-17
🟡 688.knight-probability-in-chessboard
🏷️ Tags
#dynamic_programming
Description
在一个
象棋骑士有8种可能的走法,如下图所示。每次移动在基本方向上是两个单元格,然后在正交方向上是一个单元格。
每次骑士要移动时,它都会随机从8种可能的移动中选择一种(即使棋子会离开棋盘),然后移动到那里。
骑士继续移动,直到它走了
返回 骑士在棋盘停止移动后仍留在棋盘上的概率 。
Example
🟡 688.knight-probability-in-chessboard
🏷️ Tags
#dynamic_programming
Description
在一个
n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始,并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0,0) ,右下单元格是 (n - 1, n - 1) 。象棋骑士有8种可能的走法,如下图所示。每次移动在基本方向上是两个单元格,然后在正交方向上是一个单元格。
每次骑士要移动时,它都会随机从8种可能的移动中选择一种(即使棋子会离开棋盘),然后移动到那里。
骑士继续移动,直到它走了
k 步或离开了棋盘。返回 骑士在棋盘停止移动后仍留在棋盘上的概率 。
Example
输入: n = 3, k = 2, row = 0, column = 0
输出: 0.0625
解释: 有两步(到(1,2),(2,1))可以让骑士留在棋盘上。
在每一个位置上,也有两种移动可以让骑士留在棋盘上。
骑士留在棋盘上的总概率是0.0625。