【数组篇】day18_598. 区间加法 II
【摘要】 给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai 和 0 <= y < bi 时, M[x][y] 应该加 1。在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。 示例 1:输入: m = 3, n = 3,ops = [[2,2],[3,3]]输出: 4解释: ...
给你一个 m x n
的矩阵 M
和一个操作数组 op
。矩阵初始化时所有的单元格都为 0
。ops[i] = [ai, bi]
意味着当所有的 0 <= x < ai
和 0 <= y < bi
时, M[x][y]
应该加 1。
在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。
示例 1:
输入: m = 3, n = 3,ops = [[2,2],[3,3]]
输出: 4
解释: M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。
示例 2:
输入: m = 3, n = 3, ops = [[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3]]
输出: 4
示例 3:
输入: m = 3, n = 3, ops = []
输出: 9
提示:
1 <= m, n <= 4 * 104
0 <= ops.length <= 104
ops[i].length == 2
1 <= ai <= m
1 <= bi <= n
【题解】
题解:
思路:
-
今天这道题关键在于理解题意,因为每个范围都是从 0 开始,所以,我们只需要求得最小的行和最小的列,两者相乘即可。
如下图所示,在一个大矩形中,给定了三个范围,我们找到最小的行和最小的列,就是图中蓝色的区域,相乘就是结果。
复杂度:
- 时间复杂度:O(n)
- 空间复杂度:O(1)
class Solution {
public int maxCount(int m, int n, int[][] ops) {
// 求出二维数组中最小的M[i][0],M[j][1]元素
for (int i = 0; i < ops.length; i++) {
m = Math.min(m, ops[i][0]);
n = Math.min(n, ops[i][1]);
}
return m * n;
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)