Pythonで1つのウォーターセルをランドセルに変更した後、最大の島を見つけるプログラム
1が土地を表し、0が水を表すバイナリ行列があるとします。そして島は水に囲まれた1のグループです。最大の島の大きさを見つけなければなりません。最大で1つのウォーターセルをランドセルに変更できます。
したがって、入力が次のような場合
1 | 0 | 1 |
0 | 0 | 0 |
1 | 1 | 0 |
1 | 1 | 1 |
その場合、出力は7になります。これは、1つの水セルを着陸させて2つの島を接続できるためです。したがって、最終的な行列は次のようになります-
1 | 0 | 1 |
0 | 0 | 0 |
1 | 1 | 0 |
1 | 1 | 1 |
これを解決するには、次の手順に従います-
-
R:=マットの行数、C:=マットの列数
-
質量:=新しいマップ
-
id:=555
-
関数floodfill()を定義します。これにはr、c、idが必要です
-
rとcが行列の範囲内にあり、mat [r、c]が1の場合、
-
mat [r、c]:=id
-
mass [id]:=mass [id] + 1
-
[(r + 1、c)、(r − 1、c)、(r、c + 1)、(r、c − 1)]の各ペア(r2、c2)について、実行
-
Floodfill(r2、c2、id)
-
-
-
メインの方法から、次のようにします-
-
0からRの範囲のrについては、次のようにします
-
0からCの範囲のcについては、次のようにします
-
mat [r、c]が1と同じ場合、
-
id:=id + 1
-
mass [id]:=0
-
Floodfill(r、c、id)
-
-
-
-
ans:=最大(質量と1のすべての値)
-
0からR− 1の範囲のrの場合、実行
-
0からC− 1の範囲のcの場合、実行
-
mat [r、c]が0と同じでない場合、
-
次のイテレーションに行く
-
-
island_set:=新しいセット
-
[(r + 1、c)、(r − 1、c)、(r、c + 1)、(r、c − 1)]の各ペア(r2、c2)について、実行
-
r2とc2がmatの範囲内にあり、mat [r2、c2]が1の場合、
-
mat [r2、c2]をisland_set
に追加します
-
-
ans:=ansの最大値と(1+各島のすべてのmass[island]の合計inisland_set)
-
-
-
-
ansを返す
理解を深めるために、次の実装を見てみましょう-
例
class Solution: def solve(self, mat): R, C = len(mat), len(mat[0]) mass = {} id = 555 def floodfill(r, c, id): nonlocal R, C, mat, mass if 0 <= r < R and 0 <= c < C and mat[r][c] == 1: mat[r][c] = id mass[id] += 1 for r2, c2 in [(r + 1, c), (r − 1, c), (r, c + 1), (r, c − 1)]: floodfill(r2, c2, id) for r in range(R): for c in range(C): if mat[r][c] == 1: id += 1 mass[id] = 0 floodfill(r, c, id) ans = max([val for val in mass.values()] + [1]) for r in range(R): for c in range(C): if mat[r][c] != 0: continue island_set = set() for r2, c2 in [(r + 1, c), (r − 1, c), (r, c + 1),(r, c − 1)]: if 0 <= r2 < R and 0 <= c2 < C and mat[r2][c2]: island_set.add(mat[r2][c2]) ans = max(ans, 1 + sum([mass[island] for island in island_set])) return ans ob = Solution() matrix = [ [1, 0, 1], [0, 0, 0], [1, 1, 0], [1, 1, 1] ] print(ob.solve(matrix))
入力
[ [1, 0, 1], [0, 0, 0], [1, 1, 0], [1, 1, 1] ]
出力
7
-
配列内の最大の要素を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、配列の最大要素を計算する必要があります。 ここでは、ループ全体をトラバースして最大の要素を計算し、要素を取得するブルートフォースアプローチを使用します。 以下の実装を観察できます。 例 # largest function def largest(arr,n): #maximum element max = arr[0] # traverse the whole loop for
-
配列内の最大の要素を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列を指定すると、配列内で最大の要素を見つける必要があります。 アプローチ maxを最初の要素として初期化します。 この後、指定された配列を2番目の要素から最後までトラバースします。 トラバースされたすべての要素について、現在のmaxの値と比較します maxより大きい場合、maxが更新されます。 それ以外の場合、ステートメントはを超えます 以下の実装を見てみましょう- 例 def largest(arr,n): #maximal element