【Leetcode] 85最大長方形ヒストグラムヒストグラムの最大の長方形の矩形の最大[leetcode] 84最大の長方形

0と1で満たされた2Dバイナリ行列を考えると、1つだけのを含む最大の矩形を見つけて、その面積を返します。

例:

入力:
[ 
  [ "1"、 "0"、 "1"、 "0"、 "0" ]、
  [ "1"、 "0"、 "1"、 "1"、 "1" ]、
  [「1 」、 "1"、 "1"、 "1"、 "1" ]、
  [ "1"、 "0"、 "0"、 "1"、 "0" ] 
] 
出力: 6

 

問題の意味

最大の長方形の一つでどこに全体を知るための01のマトリックスを考えます。

 

考え

すべての連結バーの高さの一部として、この問題は、と見なすことができるで[leetcode] 84最大の長方形ヒストグラムヒストグラムの最大の矩形

フォロー、コードの再利用

 

コード

1  クラスソリューション{
 2      公共 INT maximalRectangle(CHAR [] []行列){
 3         であれば(matrix.length == 0 ||行列[0] .LENGTH == 0)戻り 0 ;
4         int型の列= matrix.length。
5          int型 COL =行列[0 ] .LENGTH。
6          INT = []高新しい INT [COL]。
7          int型の領域= 0 図8は、         のためにint型 i = 0; iは、行<; iは++ ){
 9              int型 J = 0; J <COL、J ++){
 10                  であれば(行列[I] [J] == '1' ){
 11点                      の高さ[J] ++ ;
12                  } {
 13点                      の高さ[J] = 0 14                  }
 15                  
16              }     
 17             面積= Math.max(面積、largestRectangle(高さ))。
18          }
 19           リターン領域、     
20      }
 21      
22      公衆 INT largestRectangleは(int型{[]高さ)
 23          int型の領域を= 0;
24          スタック<整数> S = 新しいスタック<> ();
25          のためには、int型、I = 0; I <= heights.length;){
 26              のint値= iはheights.lengthを<?高さ[I]:0 ;
27              であれば(s.isEmpty()||値> 高さ[s.peek()]){
 28                  s.push(I)。
29                  私は++します;
30              } {
 31                  のint TEMP = s.pop()。
32                  面積= Math.max(面積、高さ[TEMP] *(s.isEmpty()I:is.peek() - 1 ))。
33             } // 他エンド
34を          } // ための端
35          の戻り領域を、 
36      }
 37 }

 

おすすめ

転載: www.cnblogs.com/liuliu5151/p/10955734.html