题目描述:
给你一个 m x n
的矩阵 M
和一个操作数组 op
。矩阵初始化时所有的单元格都为 0
。ops[i] = [ai, bi]
意味着当所有的 0 <= x < ai
和 0 <= y < bi
时, M[x][y]
应该加 1。
在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。
代码思路:
步骤 1:找出所有操作中 ai 和 bi 的最小值。
步骤 2:返回这个最小值矩形区域的大小。
观察操作规则:每次操作都是一个矩形区域的增量操作,ops[i] = [ai, bi] 表示一个 ai x bi 的矩形区域,所有该区域内的元素都会加 1。
最小值确定法:通过分析所有操作的 ai 和 bi 值,我们可以知道矩阵中最大的值一定是在 ops 数组中的 ai 和 bi 的最小值所定义的区域内。例如,矩阵的最大值将出现在被最多操作的区域。
计算最大区域:最大值的数量是矩阵中受到所有操作影响最多的区域的大小。我们只需要找到 ai 和 bi 中的最小值,并返回该区域的大小
代码实现:
class Solution:
def maxCount(self, m: int, n: int, ops: List[List[int]]) -> int:
if not ops:
return m * n
# 找到所有操作中 ai 和 bi 的最小值
min_a = min(op[0] for op in ops)
min_b = min(op[1] for op in ops)
# 最小矩形区域的大小
return min_a * min_b