LeetCode Maximal rectangle
来源:互联网 发布:软件操作指南 编辑:程序博客网 时间:2024/06/01 07:22
动态规划。我自己第一遍做没做出来,上网搜了一下答案,发现是用的之前合并方块的思路做得。
就是这样。每次统计每行累计1的个数,然后计算出每行的最大直方图面积。
那么代码是如下所示:
public class Solution { public int maximalRectangle(char[][] matrix) {if(matrix==null || matrix.length==0 || matrix[0].length==0) { return 0; } int maxArea = 0; int[] height = new int[matrix[0].length]; for(int i=0;i<matrix.length;i++) { for(int j=0;j<matrix[0].length;j++) { height[j] = matrix[i][j]=='0'?0:height[j]+1; } maxArea = Math.max(largestRectangleArea(height),maxArea); } return maxArea;}public int largestRectangleArea(int[] height) { if(height==null || height.length==0) { return 0; } int maxArea = 0; LinkedList<Integer> stack = new LinkedList<Integer>(); for(int i=0;i<height.length;i++) { while(!stack.isEmpty() && height[i]<=height[stack.peek()]) { int index = stack.pop(); int curArea = stack.isEmpty()?i*height[index]:(i-stack.peek()-1)*height[index]; maxArea = Math.max(maxArea,curArea); } stack.push(i); } while(!stack.isEmpty()) { int index = stack.pop(); int curArea = stack.isEmpty()?height.length*height[index]:(height.length-stack.peek()-1)*height[index]; maxArea = Math.max(maxArea,curArea); } return maxArea; }}
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)
- POJ 2356 Find a multiple (抽屉原理)
- rt-thread的定时器管理源码分析
- js 判断上传图片尺寸大小(var img =new Image())
- javascript实现的简单的计算器
- @available 和 #available
- LeetCode Maximal rectangle
- 复制环境下mysql5.6升级到5.7
- 中缀表达式转后缀表达式
- 简单的图论问题(Dijkstra)
- 【6】ZigZag Conversion
- rt-thread线程源码分析
- 运行快捷键
- linux 安装oracle
- 51Nod-1268-和为K的组合