已知:
給乙個布林型別的二維陣列, 0 表示海, 1 表示島。如果兩個1是相鄰的,那麼我們認為他們是同乙個島.我們只考慮 上下左右 相鄰.
找到大小在 k 及 k 以上的島嶼的數量
示例:
給乙個二維陣列:
[ [1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]給出 k =2
返回 2
思路:
題目本身題意還是很清晰的,還有乙個簡化版的求島的數量的題目。這一類題目一般來說無論是深度優先還是廣度優先演算法都是可以實現的。當然,深度優先需要解決環的問題,且需要記住每一次的節點,選定方向,這些操作用基礎的**實現是比較麻煩的。因此我是用的是廣度優先的演算法。
① 找到乙個值為true的值的下標(我的實際實現是從上往下從左往右找到第乙個),如果這一步找不到,則返回值為0
② 將當前位的true變為false,並且檢測當前位置的上下左右四個方向是否有true,如果有,則呼叫當前函式處理該位置
③ 重複第二步,返回1 + 四個方向處理的值,如果四個方向都為false或者取不到,則返回1
**如下:
public
class
solution
if (calculate(temp[0], temp[1]) >= k)
}return ret;
}//廣度優先的實現,用類似遞迴的方式, ij為起始點的下標
//因為每次函式會把當前位變為false,因此不用擔心重複計算
private
intcalculate(int i, int j)
if (i < island.length - 1 && island[i + 1][j])
if (j >= 1 && island[i][j - 1])
if (j < island[i].length - 1 && island[i][j + 1])
return ret;
}//返回值為true的下標,如果找不到,返回
private
int hasisland(boolean grid) ;}}
}return
newint ;
}}
謝謝您的閱讀~其實這個題目讓我糾結了一些時間,有一些畏難情緒,導致才寫出**,其實轉過身發現,**本身的思路並不難,大方向也不難寫,細節方面可能需要斟酌,但是其實也用不到多少時間~希望對您有所幫助~ 大島的數量
給乙個布林型別的二維陣列,0表示海,1表示島。如果兩個1是相鄰的,那麼我們認為他們是同乙個島.我們只考慮上下左右相鄰.找到大小在k及k以上的島嶼的數量 樣例1 輸入 1,1,0,0,0 0,1,0,0,1 0,0,0,1,1 0,0,0,0,0 0,0,0,0,1 2輸出 2 解釋 2d網路為 1,...
最大島嶼面積
用1表示陸地,0表示海洋,只有水平和豎直位置關係才算相鄰.求島嶼的最大連通面積 5 二維陣列大小 1 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 1 0 0 0 0 0 從一塊陸地出發,像四個方向遞迴遍歷 每次遞迴對下標進行判斷,以區域的邊界或者遇到海洋為遞迴邊界 設定訪...
最大島嶼 簡單的 搜尋
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述神秘的海洋,驚險的探險之路,打撈海底寶藏,激烈的海戰,海盜劫富等等。加勒比海盜,你知道吧?傑克船長駕駛著自己的的戰船黑珍珠1號要征服各個海島的海盜,最後成為海盜王。這是乙個由海洋 島嶼和海盜組成的危險世界。面對危險重重的海洋與詭譎...