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