力扣-598. 区间加法 II
1.题目
题目地址(598. 区间加法 II - 力扣(LeetCode))
https://leetcode.cn/problems/range-addition-ii/
题目描述
给你一个 m x n
的矩阵 M
和一个操作数组 op
。矩阵初始化时所有的单元格都为 0
。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 * 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 为数组长度。
- 时间复杂度:
- 空间复杂度:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了