通过交换Python中允许的列来找到1的最大矩形

假设我们有一个二进制矩阵,我们必须在该给定矩阵中找到所有1的最大矩形。可以通过交换或交换该矩阵的任何一对列来构建矩形。

所以,如果输入像

10010
10011
11010

那么在这种情况下,输出将为6。可以通过将列1与3交换来生成矩形。交换后的矩阵为-

00110
00111
10110

为了解决这个问题,我们将遵循以下步骤-

  • 行:=垫子的尺寸

  • col:=垫子的尺寸[0]

  • temp:=阶数(行+ 1)x(col + 1)的矩阵,并用0填充

  • 因为我的范围是0到col,

    • 如果mat [j,i]等于0,则

    • 除此以外,

    • temp [j,i]:= 0

    • temp [j,i]:= temp [j-1,i] + 1

    • temp [0,i]:= mat [0,i]

    • 对于范围1至行中的j,执行

    • 对于范围在0到行之间的i,执行

      • 如果cnt [j]> 0,则

      • j:= j-1

      • temp [i,col_no]:= j

      • col_no:= col_no + 1

      • 对于0到cnt [j]范围内的k,执行

      • cnt [temp [i,j]]:= cnt [temp [i,j]] + 1

      • cnt:=一个大小为(行+ 1)的数组,并用0填充

      • 对于范围0到col的j,增加1,执行

      • col_no:= 0

      • j:=行

      • 当j> = 0时

      • area_maximum:= 0

      • 对于范围在0到行之间的i,执行

        • area_current:=(j + 1)* temp [i,j]

        • 如果area_current> area_maximum,则

        • area_maximum:= area_current

        • 对于范围0到col的j,执行

        • 返回area_maximum

        例 

        让我们看下面的实现以更好地理解-

        def maxArea(mat):
           row = len(mat)
           col = len(mat[0])
           temp = [[0 for i in range(col + 1)] for i in range(row + 1)]
           for i in range(0, col):
              temp[0][i] = mat[0][i]
           for j in range(1, row):
              if ((mat[j][i] == 0)):
                 temp[j][i] = 0
              else:
                 temp[j][i] = temp[j - 1][i] + 1
           for i in range(0, row):
              cnt = [0 for i in range(row + 1)]
              for j in range(0, col, 1):
                 cnt[temp[i][j]] += 1
              col_no = 0
              j = row
              while(j >= 0):
                 if (cnt[j] > 0):
                    for k in range(0, cnt[j]):
                       temp[i][col_no] = j
                       col_no += 1
                 j -= 1
           area_maximum = 0
           for i in range(0, row):
              for j in range(0, col):
                 area_current = (j + 1) * temp[i][j]
                 if (area_current > area_maximum):
                    area_maximum = area_current
        
           return area_maximum
        mat = [
           [0, 0, 1, 1, 0],
           [0, 0, 1, 1, 1],
           [1, 0, 1, 1, 0]]
        print("Area : ",maxArea(mat))

        输入项

        [ [1, 0, 0, 1, 0],
        [1, 0, 0, 1, 1],
        [1, 1, 0, 1, 0]]

        输出结果

        Area : 2
        猜你喜欢