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的时候有人说可以用在这题,看了一下还真是,以每行为x轴,每列往上累计的连续的1当成高度,就可以完全使用一样的方法了。

 int largestArea(vector<int>height){
stack<int> s;
int maxArea = ;
int i = ;
height.push_back();
int len = height.size(); while (i < len){
if (s.empty() || height[s.top()] < height[i]){
s.push(i++);
}else{
int t = s.top();
s.pop();
maxArea = max(maxArea, height[t] * (s.empty()? i : (i-s.top()-)));
}
}
return maxArea;
} int maximalRectangle(vector<vector<char>> &matrix){
vector<int> height;
int maxRect=;
for (int row=; row<matrix.size(); row++){
for (int col=; col<matrix[row].size(); col++){
if (matrix[row][col] == ''){
height.push_back();
}
else{
int c=;
for (int i=row; i>-; i--){
if (matrix[i][col] != ''){
c++;
}else {
break;
}
}
height.push_back(c);
}
} for (int i=;i<height.size(); i++){
cout << height[i] << " ";
}
cout << endl; maxRect = max(maxRect, largestArea(height));
height.clear();
}
return maxRect;
} int maximalRectangle2(vector<vector<char>> &matrix){
int maxRect = ;
if (matrix.size() < ) return ;
vector<int>height(matrix[].size(), );
for (int i=; i<matrix.size(); i++){
for (int j=; j<matrix[i].size(); j++){
if (matrix[i][j] == ''){
height[j] += ;
}else{
height[j] = ;
}
}
maxRect = max(maxRect, largestArea(height));
}
return maxRect;
}

第一个maximalRectangle函数我用了很蠢的遍历方法来获得每行的height,这样活生生的把原本O(n^2)搞成了O(n^3)。。。 最后看了别人博客,说height是可以通过前一行的值算出了的(有点类似DP的思想...如果这也算的话),豁然开朗,才写出了

maximalRectangle2这个真正的O(n^2)方法。

最新文章

  1. Jquery知识点梳理
  2. Android之线程池深度剖析
  3. 神奇的margin之豆瓣豆瓣么么哒
  4. Atitit.iso格式蓝光&#160;BDMV&#160;结构说明
  5. 转载:第二弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿!每日更新!
  6. python pandas/numpy
  7. Makefile与shell脚本的区别
  8. 自动开机和自动关机设定方法(包括linux和windows)
  9. -_-#【React】
  10. poj3468(线段树)
  11. ajaxFileUpload+struts2实现多文件上传
  12. 监控redis进程,如果没有自动重启
  13. MySQL线程池的引入可以提高我们的MySQL的性能
  14. 《程序设计方法》【PDF】下载
  15. Python基础之文件和目录操作
  16. 12款 JavaScript 表格控件(DataGrid)
  17. Docker Hello World
  18. PHP可变函数
  19. Linux常用基本命令(file,chown)
  20. fullcalendar案例一&lt;原&gt;

热门文章

  1. django的中间件
  2. centos6.5 网卡的处理
  3. phpmyadmin上传大sql文件办法
  4. 【GoLang】并发小结
  5. 关于 strcpy 段错误
  6. Appium+Robotframework实现Android应用的自动化测试-6:一个简单的例子
  7. angular.js初探
  8. ACM/ICPC 之 枚举(POJ1681-画家问题+POJ1166-拨钟问题+POJ1054-讨厌的青蛙)
  9. FFmpeg frei0r water 滤镜
  10. 几种Linux 查询外网出口IP的方法