【LeetCode】第598题——范围求和II(难度:简单)

该博客介绍了LeetCode第598题,即在初始全0矩阵上执行一系列二维范围加法操作后,找出最大整数的元素个数。解题思路是关注每次操作的最小覆盖面积,最终乘积即为最大元素个数。
摘要由CSDN通过智能技术生成

【LeetCode】第598题——范围求和II(难度:简单)

题目描述

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

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

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

  1. 示例 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。

注意:

  • m 和 n 的范围是 [1,40000]。
  • a 的范围是 [1,m],b 的范围是 [1,n]。
  • 操作数目不超过 10000。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-addition-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

此题看起来要把零矩阵的对应元素按照要求进行+1,然后求出最大元素的数目。但实际上由于总是以矩阵左上角为起点进行+1,因此最大元素一定出现在左上角,因此只要找出每次+1的矩阵的长宽的最小值,其乘积便为最大元素的数目。

代码详解

class Solution {
    public int maxCount(int m, int n, int[][] ops) {
        int min0 = m;	// 长最小值,初值为m
        int min1 = n;	// 宽最小值,初值为n
        // 上面的“长”和“宽”只是说起来方便且容易区分,不要过度纠结命名
        for(int i = 0; i < ops.length; ++i) {
            if(ops[i][0] < min0) {
                min0 = ops[i][0];	// 寻找长的最小值
            }
            if(ops[i][1] < min1) {
                min1 = ops[i][1];	// 寻找宽的最小值
            }
        }
        return min0 * min1;	// 乘积便为答案
    }
}

注意点

  • 此题容易被题目描述牵鼻子走,脑筋转个弯就可想到最实际的解题思路,也往往是最简单及最恍然大悟的。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值