Leetcode 827 最大人工島 C

2021-10-09 01:33:47 字數 1233 閱讀 7199

在二維地圖上, 0代表海洋, 1代表陸地,我們最多只能將一格 0 海洋變成 1變成陸地。

進行填海之後,地圖上最大的島嶼面積是多少?(上、下、左、右四個方向相連的 1 可形成島嶼)

示例 1:

輸入: [[1, 0], [0, 1]]

輸出: 3

解釋: 將一格0變成1,最終連通兩個小島得到面積為 3 的島嶼。

示例 2:

輸入: [[1, 1], [1, 0]]

輸出: 4

解釋: 將一格0變成1,島嶼的面積擴大為 4。

示例 3:

輸入: [[1, 1], [1, 1]]

輸出: 4

解釋: 沒有0可以讓我們變成1,面積依然為 4。

說明:

並查集我們先將相連的陸地加到同乙個集合中,這樣我們能得到多個集合。然後,我們遍歷海洋,我們將其變成陸地,我們加上周圍相連陸地所在集合的元素個數便是新島的面積,這裡需要注意一點,同乙個集合只會計算一次,我們需要用乙個set集合記錄,避免重複計算。詳細過程見**

class

ufint

find

(int x)

return x;

}void

union

(int x,

int y)

else

}int

getsize

(int x)};

class

solution

if(j-

1>=

0&& grid[i]

[j-1]==

1)ans =

max(ans,uf.

getsize

(i*n+j));

}}}int dir[4]

[2]=

,,,}

; set<

int> visit;

for(

int i=

0; i}}

visit.

clear()

; ans =

max(ans,now);}

}}return ans;}}

;

827 最大人工島

給你乙個大小為 n x n 二進位制矩陣 grid 最多 只能將一格 0 變成 1 返回執行此操作後,grid 中最大的島嶼面積是多少?島嶼 由一組上 下 左 右四個方向相連的 1 形成。class solution int dc new int int grid int n public int ...

827 最大人工島 C 深度優先遍歷

深度優先遍歷2次 第一次將各個島分類,同乙個島上的格仔使用同一種編號,並且得到每個島嶼的大小 第二次試著將所有海洋都填一遍,找出最大的結果。class solution public intlargestisland vector int grid if sumarea 0 else if suma...

LeetCode 最大矩形

q 給出乙個只包含0和1的二維矩陣,找出最大的全部元素都是1的長方形區域,返回該區域的面積。a 這個題感覺蠻巧妙的。如果這個點為 1 先計算當前行的最大寬度,這說明最大寬度左邊的都是保證可以是矩形的。然後往上看,用最小的寬度和當前的高度計算最大的矩形。看圖 同理,高度也可以這麼做。另一種就是參考計算...