当前位置: 首页 > news >正文

【C++刷题】力扣-#598-区间加法 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.初始化计数器:由于所有的操作都是增加1,我们只需要跟踪每个操作影响的单元格数量。
2.执行操作:对于每个操作 ops[i] = [ai, bi],我们增加从第0行到第 ai-1 行和第0列到第 bi-1 列的单元格数量。这意味着我们只需要考虑操作影响的行数和列数。
3.计算最大整数的个数:在执行完所有操作后,矩阵中最大的整数将是所有操作中最小的行影响数和列影响数。然后,我们计算这个最大整数在矩阵中出现的次数,这将是所有行和列的最小影响数的乘积。

代码实现

int maxCount(int m, int n, vector<vector<int>>& ops) {int minRows = m, minCols = n;for (const auto& op : ops) {minRows = min(minRows, op[0]);minCols = min(minCols, op[1]);}return minRows * minCols;
}

复杂度分析

● 时间复杂度:O(k),其中 k 是操作的数量。我们只需要一次遍历操作数组即可找到最小的行影响数和列影响数。
● 空间复杂度:O(1),我们只使用了常数个额外变量。
这个算法的优势在于它避免了构建和操作整个矩阵的复杂性,而是通过简单的数学计算来解决问题。

http://www.lryc.cn/news/473939.html

相关文章:

  • 优雅的LUA数据记录方法-serpent序列化+LUA Table
  • 初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序
  • Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216)
  • C#整合Ollama实现本地LLMs调用
  • C++基于opencv的视频质量检测--图像抖动检测
  • Cuda By Example - 11 (Texture Memory 2-D)
  • Go匿名结构体使用场景
  • Vue 发布十年了!你知道我这十年是怎么过的吗?
  • Unity 6 来袭
  • SpringMVC课时1
  • 【小白学机器学习30】样本统计的核心参数:均值/期望,方差,标准差,标准值。
  • flink1.17.2安装和使用
  • C向C++入门-- C语言填坑
  • 扫雷游戏(C语言详解)
  • 信刻全自动光盘摆渡系统
  • 计算机网络的数据链路层
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(三)SpringBoot接口统一返回和全局异常处理
  • Mybatis-plus-扩展功能
  • 【AI辅助】AWS Toolkit+AmazonQ
  • 云手机简述(概况,使用场景,自己部署云手机)
  • Java已死,大模型才是未来?
  • NCCL安装(Ubuntu等)
  • 加载视频显示 - python 实现
  • 数据结构模拟题[五]
  • IDEA切换窗口快捷键失效
  • QT中使用图表之QChart绘制X轴为日期时间轴的折线图
  • 【传知代码】短期电力负荷(论文复现)
  • ubuntu20.04 加固方案-设置重复登录失败后锁定时间限制
  • 【综合算法学习】(第十三篇)
  • Web3 Key Talking #4|Sui有何不同?及其发展路线图