【刷题打卡】598. 范围求和 II

104 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

598. 范围求和 II

给你一个 m x n 的矩阵 M ,初始化时所有的 0 和一个操作数组 op ,其中 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 * 10^4
  • 0 <= ops.length <= 10^4
  • ops[i].length == 2
  • 1 <= ai <= m
  • 1 <= bi <= n

二、思路分析:

  1. 矩阵中元素更新每次都是在0<=i<a,0<=j<b的区间范围内,可得知,M[0][0]元素是最大值,最大值的区间就是左上角最小的边界区间,因为此区间一直在叠加
  2. 找出行列最小的边界,设变量行最小值,列最小值赋初值为m,n
  3. 遍历二维矩阵,不断比较行列的大小,将最小值赋予行最小值或列最小值
  4. 两值想乘便可得出结论

三、AC 代码:


class Solution:
    
    def maxCount(self, m: int, n: int, ops: List[List[int]]) -> int:
        mina,minb=m,n#设行、列最小边界变量,赋初值
        for x,y in ops:#遍历二维矩阵
            mina=min(mina,x)#找出最小值赋予变量
            minb=min(minb,y)
        return (mina*minb)#相乘就可以得到结果