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

【LeetCode】85. 最大矩形 (暴力枚举)

85. 最大矩形 - 力扣(LeetCode)

题目:

思路:

单调栈的运用

相似题:1504. 统计全 1 子矩形 - 力扣(LeetCode)

解法有两种,一种是暴力枚举,一种是单调栈优化

暴力做法很简单,我们同样枚举上界下界,然后枚举列数即可,同时这里我们可以使用一个简单的思路来计算连读h段的长度,可以先去写一下连续0段这题

代码很简单,但是时间复杂度很大,所以不妨考虑优化

我们发现我们题目其实可以变成一个柱形图,什么意思呢?

假设我们枚举到了第 i 行,那么对于每一个 sum[i][j],我们定义为 i 位置往上的最长连读 1 的数量,那么这样一转换就变成了一个柱形图,如

那么这样一直枚举行就相当于每次都求一个矩形图的最大矩形,这样以来我们就优化成了 O(N*M) 的复杂度,大大加快了速率

具体的,我们提前预处理出 sum[i][j],然后暴力枚举 i,对每个 i 都做一个单调栈的操作,同时不要忘了哨兵

参考视频:LeetCode-85 最大矩形 最近太忙啦!水一个视频~_哔哩哔哩_bilibili

代码:

class Solution {
public:int maximalRectangle(vector<vector<char>>& matrix) {int n = matrix.size();int m = matrix[0].size();int ans = 0;for(int i = 0;i < n;i++){vector<int> sum(m,0);for(int j = i;j < n;j++){int last = -1;int h = j - i + 1;for(int z =0;z < m;z++){sum[z] += matrix[j][z] - '0';if(sum[z] == h) ans = max(ans,h * (z - last));else last = z;}}}return ans;}
};
class Solution {
public:int maximalRectangle(vector<vector<char>>& matrix) {int n = matrix.size();int m = matrix[0].size();vector<vector<int>> sum(n,vector<int>(m+2,0));for(int i = 0;i < n;i++){for(int j = 0;j < m;j++){if(matrix[i][j] == '0') continue;if(i) sum[i][j+1] = sum[i-1][j+1];sum[i][j+1]++;}}int ans = 0;for(int i = 0;i < n;i++){stack<int> st;for(int j = 0;j < sum[i].size();j++){while(!st.empty() && sum[i][st.top()] > sum[i][j]){int h = sum[i][st.top()];st.pop();int w = j - st.top() - 1;ans = max(ans,h*w);}st.push(j);}}return ans;}
};

http://www.dtcms.com/a/347540.html

相关文章:

  • 某铝业智慧工厂网络建设优化方案实践
  • 使用tensorRT10部署yolov5目标检测模型(2)
  • 【深度学习】深度学习中的结构化概率模型:理论、方法与应用
  • Qt从qmake迁移到cmake的记录
  • 【深度学习新浪潮】有哪些工具可以帮助我们对视频进行内容分析和关键信息提取?
  • 从0开始学习Java+AI知识点总结-23.web实战案例(班级和学生增删改查、信息统计)
  • Day58 Java面向对象13 instanceof 和 类型转换
  • 自动化运维Ansible
  • 13.机器学习—— ML特征工程和优化方法
  • CANN安装
  • 电力方向国际期刊推荐
  • 分析 HashMap 源码
  • 《TCP多线程通信代码C语言开发流程解析》
  • redis----hash类型详解
  • 领码方案:新一代页面权限体系全景解析(完整版)
  • Radis安装部署(Linux,Docker)
  • 温度对直线导轨的性能有哪些影响?
  • TypeScript 的泛型(Generics)作用理解
  • 如何优雅解决 OpenCV 分段错误(Segfault):子进程隔离实战
  • 工业企业与海关匹配数据(2000-2013)
  • Unity中删除不及时的问题
  • DeepSeek-V3.1发布,预示下一代国产芯片即将发布,更新一小版本,跨出一大步
  • 深入理解3x3矩阵
  • Java—— 配置文件Properties
  • Spring Boot 实现 POJO 级联封装复杂属性
  • Redis学习笔记 ----- 缓存
  • 寻鲜之旅“咖”约深圳,容声冰箱引领“养鲜”新体验
  • 解决coze api使用coze.workflows.runs.create运行workflow返回400,但text为空
  • ⚡ Ranger 基础命令与功能详解
  • Talkie AI