Find largest rectangle containing only zeros in an N×N binary matrix

前端 未结 8 2426
伪装坚强ぢ
伪装坚强ぢ 2020-11-22 06:25

Given an NxN binary matrix (containing only 0\'s or 1\'s), how can we go about finding largest rectangle containing all 0\'s?

Example:

      I
    0          


        
8条回答
  •  说谎
    说谎 (楼主)
    2020-11-22 06:47

    Please take a look at Maximize the rectangular area under Histogram and then continue reading the solution below.

    Traverse the matrix once and store the following;
    
    For x=1 to N and y=1 to N    
    F[x][y] = 1 + F[x][y-1] if A[x][y] is 0 , else 0
    
    Then for each row for x=N to 1 
    We have F[x] -> array with heights of the histograms with base at x.
    Use O(N) algorithm to find the largest area of rectangle in this histogram = H[x]
    
    From all areas computed, report the largest.
    

    Time complexity is O(N*N) = O(N²) (for an NxN binary matrix)

    Example:

    Initial array    F[x][y] array
     0 0 0 0 1 0     1 1 1 1 0 1
     0 0 1 0 0 1     2 2 0 2 1 0
     0 0 0 0 0 0     3 3 1 3 2 1
     1 0 0 0 0 0     0 4 2 4 3 2
     0 0 0 0 0 1     1 5 3 5 4 0
     0 0 1 0 0 0     2 6 0 6 5 1
    
     For x = N to 1
     H[6] = 2 6 0 6 5 1 -> 10 (5*2)
     H[5] = 1 5 3 5 4 0 -> 12 (3*4)
     H[4] = 0 4 2 4 3 2 -> 10 (2*5)
     H[3] = 3 3 1 3 2 1 -> 6 (3*2)
     H[2] = 2 2 0 2 1 0 -> 4 (2*2)
     H[1] = 1 1 1 1 0 1 -> 4 (1*4)
    
     The largest area is thus H[5] = 12
    

提交回复
热议问题