力扣-598. 区间加法 II

1.题目

题目地址(598. 区间加法 II - 力扣(LeetCode))

https://leetcode.cn/problems/range-addition-ii/

题目描述

给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai0 <= 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 * 104
  • 0 <= ops.length <= 104
  • ops[i].length == 2
  • 1 <= ai <= m
  • 1 <= bi <= n

2.题解

2.1 简单模拟

思路

首先由于a,b均为正值(不存在0), 所以[0,0]每次都会被算在内, 执行完op后, [0,0]所在的值就是最大值也就是执行次数

然后我们就思考是最大值的元素个数?每次都能被计算在内?那我们不是找到op中x,y的最小值(保证每次op都被计算到), 然后 x*y 即可解决问题?
然后进行简单模拟即可, 注意下这里a不可能大于m, b不可能大于n, 这样就好设置初始值了.

代码

  • 语言支持:C++

C++ Code:

class Solution {
public:
    int maxCount(int m, int n, vector<vector<int>>& ops) {
        int a = m, int b = n;
        if(ops.empty()) return m * n;
        for(auto &op: ops){
            a = min(a, op[0]);
            b = min(b, op[1]);
        }
        return a * b;
    }
};

复杂度分析

令 n 为数组长度。

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
posted @   DawnTraveler  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示