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

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

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

思路:

该题可以看作Largest Rectangle in Histogram的变形,对于每行,求出一个height数组,然后求出可以得到的最大值。

参考资料:

代码:

1     int maxRectangleInHistogram(vector
&height){ 2 stack
Stack; 3 int i = 0, num = height.size(); 4 int result = 0; 5 while(i < num){ 6 if(Stack.empty() || height[Stack.top()] <= height[i]){ 7 Stack.push(i++); 8 } 9 else{10 int tmp = Stack.top();11 Stack.pop();12 int area = height[tmp]*(Stack.empty()?i:(i-Stack.top()-1));13 if(area > result)14 result = area;15 }16 }17 while(!Stack.empty()){18 int tmp = Stack.top();19 Stack.pop();20 int area = height[tmp]*(Stack.empty()?i:(i-Stack.top()-1));21 if(area > result)22 result = area; 23 }24 return result;25 }26 int maximalRectangle(vector
> &matrix) {27 // IMPORTANT: Please reset any member data you declared, as28 // the same Solution instance will be reused for each test case.29 int m = matrix.size();30 if(m == 0)31 return 0;32 int n = matrix[0].size();33 if(n == 0)34 return 0;35 vector
> height(m, vector
(n, 0));36 int i,j;37 for(i = 0; i < m; i++){38 for(j = 0; j < n; j++){39 if(matrix[i][j] == '0')40 height[i][j] = 0;41 else42 height[i][j] = i==0 ? 1 : height[i-1][j]+1;43 }44 }45 int result = 0;46 for(i = 0; i < m; i++){47 int tmp = maxRectangleInHistogram(height[i]);48 if(tmp > result)49 result = tmp; 50 }51 return result;52 }

 

转载于:https://www.cnblogs.com/waruzhi/p/3441246.html

你可能感兴趣的文章
MoSQL
查看>>
Hibernate多对一外键单向关联(Annotation配置)
查看>>
《CLR via C#》读书笔记 之 方法
查看>>
设计模式:组合模式(Composite Pattern)
查看>>
ContentValues 和HashTable区别
查看>>
LogicalDOC 6.6.2 发布,文档管理系统
查看>>
给PowerShell脚本传递参数
查看>>
实战2——Hadoop的日志分析
查看>>
利用FIFO进行文件拷贝一例
查看>>
Ecshop安装过程中的的问题:cls_image::gd_version()和不支持JPEG
查看>>
resmgr:cpu quantum等待事件
查看>>
一个屌丝程序猿的人生(六十六)
查看>>
Java 编码 UTF-8
查看>>
SpringMVC实战(注解)
查看>>
关于静态属性和静态函数
查看>>
进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
查看>>
spring+jotm+ibatis+mysql实现JTA分布式事务
查看>>
MyBatis启动:MapperStatement创建
查看>>
调查问卷相关
查看>>
eclipse启动无响应,老是加载不了revert resources,或停留在Loading workbench状态
查看>>