Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの特定の行列で1の最大の正方形の領域を見つけるプログラム


バイナリ行列があるとすると、その与えられた行列で1の最大の2乗を見つける必要があります。

したがって、入力が次のような場合

1
0
0
0
0
1
1
0
0
0
0
0
1
1
0
1
1
1
1
0
0
0
1
1
1
1
0
0
0
1
1
1
1
0
0
0
1
1
1
1
0
0

その場合、出力は16になります。

これを解決するには、次の手順に従います-

  • res:=0
  • 0から行列のサイズまでの範囲のiについては、
    • res:=resとmatrix[i、0]の最大値
  • 0からmatrix[0]のサイズまでの範囲のiの場合、do
    • res:=resとmatrix[0、i]の最大値
  • 1から行列の行数までの範囲のiについては、
    • 1から行列の列数までの範囲のjについては、
      • matrix [i、j]が1と同じ場合、
        • matrix [i、j] =最小値(matrix [i-1、j]、matrix [i-1、j-1]およびmatrix [i、j-1])+ 1
      • res =resとmatrix[i、j]の最大値
  • return res ^ 2

理解を深めるために、次の実装を見てみましょう-

class Solution:
   def solve(self, matrix):
      res = 0
      for i in range(len(matrix)):
         res = max(res, matrix[i][0])
      for i in range(len(matrix[0])):
         res = max(res, matrix[0][i])

      for i in range(1, len(matrix)):
         for j in range(1, len(matrix[0])):
            if matrix[i][j] == 1:
               matrix[i][j] = min(matrix[i - 1][j], matrix[i - 1][j - 1], matrix[i][j - 1]) + 1

               res = max(res, matrix[i][j])

      return res * res

ob = Solution()
matrix = [
   [1, 0, 0, 0, 0, 1, 1],
   [0, 0, 0, 0, 0, 1, 1],
   [0, 1, 1, 1, 1, 0, 0],
   [0, 1, 1, 1, 1, 0, 0],
   [0, 1, 1, 1, 1, 0, 0],
   [0, 1, 1, 1, 1, 0, 0]
]
print(ob.solve(matrix))

入力

matrix = [  
[1, 0, 0, 0, 0, 1, 1],  
[0, 0, 0, 0, 0, 1, 1],  
[0, 1, 1, 1, 1, 0, 0],  
[0, 1, 1, 1, 1, 0, 0],  
[0, 1, 1, 1, 1, 0, 0],  
[0, 1, 1, 1, 1, 0, 0] ]

出力

16

  1. Pythonのヒストグラムの下で最大の長方形の領域を見つけるプログラム

    ヒストグラムの棒の高さを表す数値のリストがあるとします。バーの下に形成できる最大の長方形の領域を見つける必要があります。 したがって、入力がnums =[3、2、5、7]のような場合 その場合、出力は10になります これを解決するには、次の手順に従います- stk:=スタックで、最初に-1を挿入します 高さの最後に0を挿入 ans:=0 0から高さのサイズまでの範囲のiについては、 heights [i]

  2. 行列の転置を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A):    for i in range(N):       for j in range(i+1, N):     &nbs