[動的プログラミング] 85最大矩形をleetcode

問題:https://leetcode.com/problems/maximal-rectangle/

         私のアプローチは、一次元にそれを置くことです。最初の接頭辞と各列を計算します。

         行をスキャンした後、各列は同じもののヒストグラム、最大矩形領域ヒストグラムのちょうど次の計算を得るために、横、高さのような現在の値とみなすことができます。Oの時間複雑(N3)

クラス解決{
 パブリックINT maximalRectangle(ベクトル<ベクトル< チャー >>&行列){
         場合(matrix.size()== 0戻り 0 ;
        INT、M = matrix.size()。
        INT、N =行列[ 0 ] .size()。
        int型の最大= 0 ; 
        ベクター <ベクトル< INT >> DP(M、ベクトル< INT >(N、0 ));
        以下のためにint型 i = 0 ; iがm <; iは++ ){
            INT J = 0 ; J <nであり、j ++ ){
                 場合(行列[I] [J] == ' 1 ' ){
                     場合(I> = 1)DP [I] [j]はDPを= [I - 1 ] [J] + 1 他の DP [I] [J] = 1 ; 
                   
                } 
            } 
        } 
        のためのint型 I = 0 ; iが<M iが++ ){
             ためINT J = 0 ; J <nであり、j ++ ){
                 もし(DP [I] [J]> 0 ){
                     int型の高さ= DP [I] [J]。
                    int型、K> = K = J 0 ; k-- ){
                         場合(DP [I] [K] == 0ブレークもし(DP [I] [K] <高さ)、高さ= DP [I] [K]。
                        INTの R =(J - K + 1)* 高さ。
                        もし(R> MAX)最大= R。
                    } 
                } 
            } 
        } 
        リターン最大; 
    } 
}。

 

おすすめ

転載: www.cnblogs.com/fish1996/p/11299856.html