博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-85-Maximal Rectangle
阅读量:6040 次
发布时间:2019-06-20

本文共 1667 字,大约阅读时间需要 5 分钟。

算法描述:

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.

Example:

Input:[  ["1","0","1","0","0"],  ["1","0","1","1","1"],  ["1","1","1","1","1"],  ["1","0","0","1","0"]]Output: 6

解题思路:利用直方图最大面积求解,每一行构建一个直方图。当元素为1时,直方图对应元素加1,否则置为0;

int maximalRectangle(vector
>& matrix) { if(matrix.size()==0 || matrix[0].size()==0) return 0; int m = matrix.size(); int n= matrix[0].size(); int maxArea = 0; vector
hist(n,0); for(int i=0; i < m; i++){ for(int j =0; j < n; j++){ if( matrix[i][j] == '1') hist[j] += 1; else hist[j] = 0; } maxArea = max(maxArea,maxAreaOfHist(hist)); } return maxArea; } int maxAreaOfHist(vector
& heights){ if(heights.size()==0) return 0; stack
stk; int maxArea = 0; int i=0; while(i < heights.size()){ if(stk.empty() || heights[i] >= heights[stk.top()]){ stk.push(i); i++; }else{ int index = stk.top(); stk.pop(); maxArea = max(maxArea, heights[index]*(stk.empty()? i: i-stk.top()-1)); } } while(!stk.empty()){ int index = stk.top(); stk.pop(); maxArea = max(maxArea, heights[index]*(stk.empty()?i:i-stk.top()-1)); } return maxArea; }

 

转载于:https://www.cnblogs.com/nobodywang/p/10383983.html

你可能感兴趣的文章
Alias Method for Sampling 采样方法
查看>>
收缩数据库日志
查看>>
vi/vim基本使用命令
查看>>
jar包和war包的区别:
查看>>
lavarel 响应宏
查看>>
[Debug] Use Remote Sources to Debug a Web App on an Emulator, Simulator, or Physical Device
查看>>
MySQL读写分离
查看>>
js&jquery 获取select下拉框的值、文本内容、自定义属性
查看>>
搭建ssm框架项目基本原理和主要的配置文件小结
查看>>
导出表结构sql语句
查看>>
centOS7服务管理与启动流程
查看>>
Unity2018.1中文更新日志速览版
查看>>
WPF 4 日历控件(Calendar)
查看>>
树莓派之OLED12864视频播放—BadApple
查看>>
论如何优雅地拿下PHPCMS
查看>>
[PHP] 数据结构-二叉树的创建PHP实现
查看>>
让你的Blend“编辑其他模板”菜单里出现你的Style
查看>>
UILabel添加图片之富文本的简单应用
查看>>
Ipython Notebook ipynb文件转化为Python脚本
查看>>
springboot~rabbitmq的队列初始化和绑定
查看>>