• 每日leetcode-数组-598. 范围求和 II


    分类:数组-二维数组及滚动数组

    题目描述:

    给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。

    操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符合 0 <= i < a 以及 0 <= j < b的元素 M[i][j] 的值都增加 1。

    在执行给定的一系列操作后,你需要返回矩阵中含有最大整数的元素个数。

    解题思路:

    每次操作都是左上角区域从(0, 0)到(a, b)的矩形,必定重叠,所以找最小的a乘最小的b就行。

    第一时间想到的是暴力解法,创建数组把操作执行一遍,再遍历一次找出最大的值个数,发现内存超出,于是乎换个思路
    仔细看一下发现,操作的范围是一个矩形,可以把操作看成一个个矩形,要找出最大值个数,其实就是找出所有操作矩形叠加的区域,因为所有操作都加了叠加区域的数值
    因此我们只要遍历操作数组,找到m和n的最小值(就是重叠区域)相乘就是矩形面积(既最大值个数)
    需要注意的是如果操作数组为空,那么空数组的最大值就是0,那么最大值个数就是m*n

    class Solution:
        def maxCount(self, m: int, n: int, ops: List[List[int]]) -> int:
                    #返回最小值的乘积 或者 全0返回m * n
            return min([a[0] for a in ops]) * min([a[1] for a in ops]) if ops else m * n

    复杂度分析

    • 时间复杂度:O(x)O(x)。只需要遍历所有操作一次,xx 是操作的数目。

    • 空间复杂度:O(1)O(1)。不需要额外的数组空间。

     
  • 相关阅读:
    使用java.util.Properties类读写配置文件
    maven配置文件setting.xml字段注释
    使用Nexus搭建Maven代理仓库
    Memcached 内存管理详解
    Memcached常用命令及使用说明
    使用NTP协议服务器时间同步
    Eclipse打JAR包的使用
    Eclipse插件的各种安装方法
    Java中代理对象的使用小结
    tp5框架成功、失败提示模板修改
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14778762.html
Copyright © 2020-2023  润新知