694 不同島嶼的數量

2021-10-24 16:13:36 字數 1056 閱讀 9343

題目描述:

給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通(上、下、左、右四個方向)的 1 組成,你可以認為網格的四周被海水包圍。

請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換(不可以旋轉、翻轉)和另乙個島嶼重合。

示例 1:

11000

11000

00011

00011

給定上圖,返回結果 1 。

示例 2:

11011

10000

00001

11011

給定上圖,返回結果 3 。

注意:111

和111是不同的島嶼,因為我們不考慮旋轉、翻轉操作。

二維陣列每維的大小都不會超過 50 。

方法1:

主要思路:

(1)遍歷陣列,找出每個島嶼左上角的第乙個位置,從該位置開始進行廣度優先搜尋,並將搜尋過的位置標記,同時將搜尋到的座標都減去第乙個左上角的位置的座標(相當於將整個島嶼以左上角為基準平移到0,0的位置);

(2)將平移後的島嶼的座標都儲存到set中,用於去重相同的島嶼的形狀,最後返回的set的大小,即為島嶼的種類;

class

solution

if(x+

1size()

&&grid[x+1]

[y]==1)

if(y-

1>=

0&&grid[x]

[y-1]==

1)if(y+

1.size()

&&grid[x]

[y+1]==

1)}//將當前島嶼插入set中,相同的島嶼會自動去重

st.insert

(tmp);}

}}//返回set的大小

return st.

size()

;}};

694不同島嶼的數量

給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通 上 下 左 右四個方向 的 1 組成,你可以認為網格的四周被海水包圍。請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換 不可以旋轉 翻轉 和另乙個島嶼重合。示例 11011 10000 00...

島嶼的數量(思維)

題目 有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如 島嶼的高...

島嶼的數量 (思維)

有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如 島嶼的高度為 ...