「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」
Hope is a good thing, maybe the best of things. And no good thing ever dies.
题目
给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。
操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符合 0 <= i < a 以及 0 <= j < b 的元素 M[i][j] 的值都增加 1。
在执行给定的一系列操作后,需要返回矩阵中含有最大整数的元素个数。
示例:
输入:
m = 3, n = 3
operations = [[2,2],[3,3]]
输出: 4
解释:
初始状态, M =
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
执行完操作 [2,2] 后, M =
[[1, 1, 0],
[1, 1, 0],
[0, 0, 0]]
执行完操作 [3,3] 后, M =
[[2, 2, 1],
[2, 2, 1],
[1, 1, 1]]
M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。
分析
每次操作都是左上角区域从(0, 0)到(a, b)的矩形,必定重叠,所以找最小的 a 乘最小的 b 就行。
所有的 ops[i] 中的横纵坐标 (x,y) 与左上角 (0,0) 形成的区域面积可确保被每次操作覆盖,x∗y 就是所要的结果(亦或者说是所有操作的交集)
每执行一次 operations 的元素, M * N 的二维数组,从 (0, 0)位置开始到 operations 值 (x,y) 所表示的坐标位置执行 +1,所以最大值就是执行次数最多的二维坐标位置,operations 中最小坐标的x值 和 y值相乘就是最大值次数。
解题
var maxCount = function(m, n, ops) {
let mina = m, minb = n;
for (const op of ops) {
// 获取最小坐标值
mina = Math.min(mina, op[0]);
minb = Math.min(minb, op[1]);
}
// 最大整数的元素个数
return mina * minb;
};
结语
如果这篇文章帮到了你,欢迎点赞👍和关注⭐️。
文章如有错误之处,希望在评论区指正🙏🙏
欢迎关注我的微信公众号,一起交流技术,微信搜索 🔍 :「 五十年以后 」