leetcode Maximal Rectangle
来源:互联网 发布:淘宝网店装修模板代码 编辑:程序博客网 时间:2024/06/08 19:54
Description:
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.
For example, given the following matrix:
1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0Return 6
Solution:
递推公式如下:
left(i, j) = max(left(i-1, j), cur_left);right(i, j) = min(right(i-1, j), cur_right);height(i, j) = height(i-1, j) + 1, if matrix[i][j]=='1';height(i, j) = 0, if matrix[i][j]=='0'.
DP
class Solution { public: int maximalRectangle(vector<vector<char> > &matrix) { if(matrix.empty()) return 0; const int m = matrix.size(); const int n = matrix[0].size(); int left[n], right[n], height[n]; fill_n(left,n,0); fill_n(right,n,n); fill_n(height,n,0); int maxA = 0; for(int i=0; i<m; i++) { int cur_left=0, cur_right=n; for(int j=0; j<n; j++) { // compute height (can do this from either side) if(matrix[i][j]=='1') height[j]++; else height[j]=0; } for(int j=0; j<n; j++) { // compute left (from left to right) if(matrix[i][j]=='1') left[j]=max(left[j],cur_left); else {left[j]=0; cur_left=j+1;} } // compute right (from right to left) for(int j=n-1; j>=0; j--) { if(matrix[i][j]=='1') right[j]=min(right[j],cur_right); else {right[j]=n; cur_right=j;} } // compute the area of rectangle (can do this from either side) for(int j=0; j<n; j++) maxA = max(maxA,(right[j]-left[j])*height[j]); } return maxA; }};
阅读全文
0 0
- 【LeetCode】Maximal Rectangle && Maximal Square
- Leetcode:Maximal Square & Maximal Rectangle
- LeetCode: Maximal Rectangle
- LeetCode Maximal Rectangle
- LeetCode: Maximal Rectangle
- [LeetCode] Maximal Rectangle
- [leetcode] Maximal Rectangle
- [LeetCode]Maximal Rectangle
- [leetcode]Maximal Rectangle
- LeetCode-Maximal Rectangle
- [leetcode] Maximal Rectangle
- Leetcode Maximal Rectangle
- [LeetCode] Maximal Rectangle
- leetcode Maximal Rectangle
- LeetCode Maximal Rectangle
- LeetCode | Maximal Rectangle
- [LeetCode] Maximal Rectangle
- [Leetcode] Maximal Rectangle (Java)
- struts2-timer拦截器实例
- java中实现线程池的方式
- OpenCV学习笔记(1)——显示一个图片
- Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
- Survival (状态dp)
- leetcode Maximal Rectangle
- 线程
- 朴素贝叶斯算法 & 应用实例
- Java IO 经典教程 (中) (翻译自jenkov.com)
- OpenCV学习笔记(2)——播放视频
- C# 字典(dictionary)练习,小写数字转大写
- 二维码
- Retrofit源码解读(三)--RxJavaCallAdapterFactory讲解
- 洛谷2085 最小函数值