Maximal Rectangle leetcode java
生活随笔
收集整理的這篇文章主要介紹了
Maximal Rectangle leetcode java
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
?
題解:
?這道題可以應用之前解過的Largetst Rectangle in Histogram一題輔助解決。解決方法是:
按照每一行計算列中有1的個數,作為高度,當遇見0時,這一列高度就為0。然后對每一行計算 Largetst Rectangle in Histogram,最后得到的就是結果。
?
代碼如下:
?1?public?int?maximalRectangle(char[][]?matrix)?{?2?????????if(matrix==null?||?matrix.length==0?||?matrix[0].length==0)
?3?????????????return?0;
?4?????????int?m?=?matrix.length;
?5?????????int?n?=?matrix[0].length;
?6?????????int?max =?0;
?7?????????int[]?height?=?new?int[n];//對每一列構造數組
?8?????????for(int?i=0;i<m;i++){
?9?????????????for(int?j=0;j<n;j++){
10?????????????????if(matrix[i][j]?==?'0')//如果遇見0,這一列的高度就為0了
11?????????????????????height[j]?=?0;
12?????????????????else
13?????????????????????height[j]?+=?1;
14?????????????}
15?????????????max =?Math.max(largestRectangleArea(height),max);
16?????????}
17?????????return?max;
18?????}
19?????
20?????public?int?largestRectangleArea(int[]?height)?{
21?????????Stack<Integer>?stack?=?new?Stack<Integer>();
22?????????int?i?=?0;
23?????????int?maxArea?=?0;
24?????????int[]?h?=?new?int[height.length?+?1];
25?????????h?=?Arrays.copyOf(height,?height.length?+?1);
26?????????while(i?<?h.length){
27?????????????if(stack.isEmpty()?||?h[stack.peek()]?<=?h[i]){
28?????????????????stack.push(i);
29?????????????????i++;
30?????????????}else?{
31?????????????????int?t?=?stack.pop();
32?????????????????int?square?=?-1;
33?????????????????if(stack.isEmpty())
34?????????????????????square?=?h[t]*i;
35?????????????????else{
36?????????????????????int?x?=?i-stack.peek()-1;
37?????????????????????square?=?h[t]*x;
38?????????????????}
39?????????????????maxArea?=?Math.max(maxArea,?square);
40?????????????}
41?????????}
42?????????return?maxArea;
43?????}
?
總結
以上是生活随笔為你收集整理的Maximal Rectangle leetcode java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可能 delphi7 下稳定的最后一版本
- 下一篇: 字符串匹配算法KMP算法