문제 : https://leetcode.com/problems/maximal-rectangle/
나의 접근 방식은 하나의 차원에 넣어하는 것입니다. 먼저, 프리픽스 및 각 열을 구한다.
행을 스캔 한 후, 각 행은 똑같은 히스토그램, 최대 사각형 영역의 히스토그램의 바로 다음 계산을 수득 횡축, 높이와 현재의 값으로 간주 될 수있다. O의 시간 복잡도 (N3)
클래스 해결 { 공개 : INT maximalRectangle (벡터 <벡터 < 문자 >> 및 매트릭스) { 경우 (matrix.size () == 0 ) 복귀 0 ; INT m = matrix.size (); INT n은 행렬 [ 0 ] 크기는 (); INT 최대 = 0 ; 벡터 <벡터 < INT >> DP (m, 벡터 < INT > (N, 0 )); 위한 ( int로 I = 0 ; I <m은, 내가 ++ ) { 대 ( INT의 J = 0 ; J <N; J ++ ) { 경우 (== 행렬 [I] [J] ' 1 ' ) { 경우 (Ⅰ> = 1 ) (DP)가 [I]는 [j]가 DP를 = I - 1 [J] + 1 ; 다른 DP [I] [J] = 1 ; } } } 에 대해 ( int로 I = 0 ; I은 m이 <; 내가 ++ ) { 위해 ( INT의 J = 0 , N J <; J를 ++ ) { 만약(DP [I] [J]> 0 ) { INT의 높이 = DP [I] [J] 위한 ( INT의 K = J, K> = 0 ; k-- ) { 경우 (DP [I] [K] == 0 ) 분해 ; 경우 (DP [I] [K] <높이) 높이 = DP [I] [K]; INT의 R = (j - K + 1 ) * 높이; 경우 (R> 최대) = 최대 R; } } } } 반환최대; } };