Leetcode-cn.com 2022-07-10
🔴 741.cherry-pickup
🏷️ Tags
#array #dynamic_programming #matrix
Description
一个N x N的网格
0 表示这个格子是空的,所以你可以穿过它。
1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它。
-1 表示这个格子里有荆棘,挡着你的路。
你的任务是在遵守下列规则的情况下,尽可能的摘到最多樱桃:
从位置 (0, 0) 出发,最后到达 (N-1, N-1) ,只能向下或向右走,并且只能穿越有效的格子(即只可以穿过值为0或者1的格子);
当到达 (N-1, N-1) 后,你要继续走,直到返回到 (0, 0) ,只能向上或向左走,并且只能穿越有效的格子;
当你经过一个格子且这个格子包含一个樱桃时,你将摘到樱桃并且这个格子会变成空的(值变为0);
如果在 (0, 0) 和 (N-1, N-1) 之间不存在一条可经过的路径,则没有任何一个樱桃能被摘到。
Example
🔴 741.cherry-pickup
🏷️ Tags
#array #dynamic_programming #matrix
Description
一个N x N的网格
(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示:0 表示这个格子是空的,所以你可以穿过它。
1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它。
-1 表示这个格子里有荆棘,挡着你的路。
你的任务是在遵守下列规则的情况下,尽可能的摘到最多樱桃:
从位置 (0, 0) 出发,最后到达 (N-1, N-1) ,只能向下或向右走,并且只能穿越有效的格子(即只可以穿过值为0或者1的格子);
当到达 (N-1, N-1) 后,你要继续走,直到返回到 (0, 0) ,只能向上或向左走,并且只能穿越有效的格子;
当你经过一个格子且这个格子包含一个樱桃时,你将摘到樱桃并且这个格子会变成空的(值变为0);
如果在 (0, 0) 和 (N-1, N-1) 之间不存在一条可经过的路径,则没有任何一个樱桃能被摘到。
Example
输入: grid =
[[0, 1, -1],
[1, 0, -1],
[1, 1, 1]]
输出: 5
解释:
玩家从(0,0)点出发,经过了向下走,向下走,向右走,向右走,到达了点(2, 2)。
在这趟单程中,总共摘到了4颗樱桃,矩阵变成了[[0,1,-1],[0,0,-1],[0,0,0]]。
接着,这名玩家向左走,向上走,向上走,向左走,返回了起始点,又摘到了1颗樱桃。
在旅程中,总共摘到了5颗樱桃,这是可以摘到的最大值了。
Leetcode-cn.com 2022-07-12
🟢 1252.cells-with-odd-values-in-a-matrix
🏷️ Tags
#array #math #simulation
Description
给你一个
另有一个二维索引数组
对
给你
Example
🟢 1252.cells-with-odd-values-in-a-matrix
🏷️ Tags
#array #math #simulation
Description
给你一个
m x n 的矩阵,最开始的时候,每个单元格中的值都是 0。另有一个二维索引数组
indices,indices[i] = [ri, ci] 指向矩阵中的某个位置,其中 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。对
indices[i] 所指向的每个位置,应同时执行下述增量操作:ri 行上的所有单元格,加 1 。ci 列上的所有单元格,加 1 。给你
m、n 和 indices 。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 奇数值单元格 的数目。Example
输入:m = 2, n = 3, indices = [[0,1],[1,1]]
输出:6
解释:最开始的矩阵是 [[0,0,0],[0,0,0]]。
第一次增量操作后得到 [[1,2,1],[0,1,0]]。
最后的矩阵是 [[1,3,1],[1,3,1]],里面有 6 个奇数。
Leetcode-cn.com 2022-07-13
🟡 735.asteroid-collision
🏷️ Tags
#stack #array
Description
给定一个整数数组
对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。
找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。
Example
🟡 735.asteroid-collision
🏷️ Tags
#stack #array
Description
给定一个整数数组
asteroids,表示在同一行的行星。对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。
找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。
Example
输入:asteroids = [5,10,-5]
输出:[5,10]
解释:10 和 -5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。
Leetcode-cn.com 2022-07-14
🔴 745.prefix-and-suffix-search
🏷️ Tags
#design #trie #string
Description
设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词。
实现
Example
🔴 745.prefix-and-suffix-search
🏷️ Tags
#design #trie #string
Description
设计一个包含一些单词的特殊词典,并能够通过前缀和后缀来检索单词。
实现
WordFilter 类:WordFilter(string[] words) 使用词典中的单词 words 初始化对象。f(string pref, string suff) 返回词典中具有前缀 prefix 和后缀 suff 的单词的下标。如果存在不止一个满足要求的下标,返回其中 最大的下标 。如果不存在这样的单词,返回 -1 。Example
输入
["WordFilter", "f"]
[[["apple"]], ["a", "e"]]
输出
[null, 0]
解释
WordFilter wordFilter = new WordFilter(["apple"]);
wordFilter.f("a", "e"); // 返回 0 ,因为下标为 0 的单词:前缀 prefix = "a" 且 后缀 suff = "e" 。
Leetcode-cn.com 2022-07-15
🟡 558.logical-or-of-two-binary-grids-represented-as-quad-trees
🏷️ Tags
#tree #divide_and_conquer
Description
二进制矩阵中的所有元素不是 0 就是 1 。
给你两个四叉树,
请你返回一个表示
注意,当
四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:
我们可以按以下步骤为二维区域构建四叉树:
如果当前网格的值相同(即,全为
如果当前网格的值不同,将
使用适当的子网格递归每个子节点。
如果你想了解更多关于四叉树的内容,可以参考 wiki 。
四叉树格式:
输出为使用层序遍历后四叉树的序列化形式,其中
它与二叉树的序列化非常相似。唯一的区别是节点以列表形式表示
如果
Example
🟡 558.logical-or-of-two-binary-grids-represented-as-quad-trees
🏷️ Tags
#tree #divide_and_conquer
Description
二进制矩阵中的所有元素不是 0 就是 1 。
给你两个四叉树,
quadTree1 和 quadTree2。其中 quadTree1 表示一个 n * n 二进制矩阵,而 quadTree2 表示另一个 n * n 二进制矩阵。请你返回一个表示
n * n 二进制矩阵的四叉树,它是 quadTree1 和 quadTree2 所表示的两个二进制矩阵进行 按位逻辑或运算 的结果。注意,当
isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受 。四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:
val:储存叶子结点所代表的区域的值。1 对应 True,0 对应 False;isLeaf: 当这个节点是一个叶子结点时为 True,如果它有 4 个子节点则为 False 。
class Node {
public boolean val;
public boolean isLeaf;
public Node topLeft;
public Node topRight;
public Node bottomLeft;
public Node bottomRight;
}
我们可以按以下步骤为二维区域构建四叉树:
如果当前网格的值相同(即,全为
0 或者全为 1),将 isLeaf 设为 True ,将 val 设为网格相应的值,并将四个子节点都设为 Null 然后停止。如果当前网格的值不同,将
isLeaf 设为 False, 将 val 设为任意值,然后如下图所示,将当前网格划分为四个子网格。使用适当的子网格递归每个子节点。
如果你想了解更多关于四叉树的内容,可以参考 wiki 。
四叉树格式:
输出为使用层序遍历后四叉树的序列化形式,其中
null 表示路径终止符,其下面不存在节点。它与二叉树的序列化非常相似。唯一的区别是节点以列表形式表示
[isLeaf, val] 。如果
isLeaf 或者 val 的值为 True ,则表示它在列表 [isLeaf, val] 中的值为 1 ;如果 isLeaf 或者 val 的值为 False ,则表示值为 0 。Example
输入:quadTree1 = [[0,1],[1,1],[1,1],[1,0],[1,0]]
, quadTree2 = [[0,1],[1,1],[0,1],[1,1],[1,0],null,null,null,null,[1,0],[1,0],[1,1],[1,1]]
输出:[[0,0],[1,1],[1,1],[1,1],[1,0]]
解释:quadTree1 和 quadTree2 如上所示。由四叉树所表示的二进制矩阵也已经给出。
如果我们对这两个矩阵进行按位逻辑或运算,则可以得到下面的二进制矩阵,由一个作为结果的四叉树表示。
注意,我们展示的二进制矩阵仅仅是为了更好地说明题意,你无需构造二进制矩阵来获得结果四叉树。
236.lowest-common-ancestor-of-a-binary-tree.pdf
66.1 KB
Leetcode.com 2022-07-26
🟡236.lowest-common-ancestor-of-a-binary-tree
🏷️ Tags
#tree #depth_first_search #binary_tree
🟡236.lowest-common-ancestor-of-a-binary-tree
🏷️ Tags
#tree #depth_first_search #binary_tree
114.flatten-binary-tree-to-linked-list.pdf
84.9 KB
Leetcode.com 2022-07-27
🟡114.flatten-binary-tree-to-linked-list
🏷️ Tags
#linked_list #stack #tree #depth_first_search #binary_tree
🟡114.flatten-binary-tree-to-linked-list
🏷️ Tags
#linked_list #stack #tree #depth_first_search #binary_tree
1161.maximum-level-sum-of-a-binary-tree.pdf
81 KB
leetcode.cn 2022-07-31
🟡1161.maximum-level-sum-of-a-binary-tree
🏷️ Tags
#tree #depth_first_search #breadth_first_search #binary_tree
🟡1161.maximum-level-sum-of-a-binary-tree
🏷️ Tags
#tree #depth_first_search #breadth_first_search #binary_tree
307.range-sum-query-mutable.pdf
63 KB
leetcode.com 2022-07-31
🟡307.range-sum-query-mutable
🏷️ Tags
#array #design #binary_indexed_tree #segment_tree
🟡307.range-sum-query-mutable
🏷️ Tags
#array #design #binary_indexed_tree #segment_tree