空でない2次元配列を指定 grid
0と1つの島は、の基で 1
の(を表すランド)4方向接続(水平または垂直)あなたは水に囲まれているグリッドのすべての4つのエッジをとることができます。
所与の2Dアレイにおける島の最大面積を見つけます。(何島がない場合、最大の面積は0です)
例1:
[0,0,1,0,0,0,0,1,0,0,0,0,0]、 [0,0,0,0,0,0,0,1,1,1、 0,0,0]、 [0,1,1,0,1,0,0,0,0,0,0,0,0]、 [0,1,0,0,1,1,0、 0,1,0,1,0,0]、 [0,1,0,0,1,1,0,0,1,1,1,0,0]、 [0,0,0,0、 0,0,0,0,0,0,1,0,0]、 [0,0,0,0,0,0,0,1,1,1,0,0,0]、 [0、 0,0,0,0,0,0,1,1,0,0,0,0]]
上記のグリッドを考えると、返します 6
。島は4方向的に接続されなければならないので答えは、11ないことに注意してください。
例2:
[0,0,0,0,0,0,0,0]
上記のグリッドを考えると、返します 0
。
注:指定された各次元の長さが grid
50を超えません。
このBFSの基本的な主題である、2次元配列、各グリッド[i]の[j]を掃引するループのための2つが1であり、最終的には、取得したサイズとANSを比較するために、再びBFSを行く、前に訪れた、とされていない場合復帰はANS。
T:O(M * N)
コード
クラスのソリューション(オブジェクト): デフmaxAreaOfIsland(自己、グリッド): "" " :タイプグリッド:リスト[一覧[INT] :RTYPE:int型 """ LR、LC、dirsに、訪問し、ANS、キュー = LEN(グリッド)、lenの(グリッド[0])、[(1、0)、(-1、0)、(0、-1)、(0、1 )]、セット()、0、collections.deque() のために I における範囲(LR) のための J における範囲(LC): もしグリッド[I] [J] == 1 と(i、j)はしない で訪問: サイズ = 0 queue.append((i、j)は) visited.add((i、j)の) 一方キュー: R、C = queue.popleft() サイズ + = 1 用の D1、D2 にDIRS: NR、NC = R + D1、C + D2 であれば 0 <= NR < LR および 0 <= NC <LC 及び(NR、NC)しない で訪問とグリッド[NR] [NC] == 1 : queue.append((NR、NC)) visited.add((NR、NC)) 年 = MAX(年齢、サイズ) の戻り年