問題: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。 } } } } リターン最大; } }。