專欄 | 九章演算法
網址 | www.jiuzhang.com
題目描述
以二維整數網格的形式給出地圖,1代表陸地,0代表水。
網格單元水平/垂直連線(不包含對角)。
整張地圖被水完全包圍,並且有一個島(即一個或多個連線的陸地單元)。
島上沒有“湖泊”(裡面的水沒有連線到島外的水)。
一個單元格是邊長為1的正方形。
網格為矩形,寬度和高度不超過100。
確定島嶼的周長。
樣例
輸入:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
輸出:
16
樣例解釋:
樣例輸入的島嶼的周長為16,如圖中黃線所示。
解題思路
2.1 題目中對於周長的定義為陸地和水邊界的地方,那麼我們就能模擬題意,列舉所有的格子,對於每個為陸地的格子,判斷周圍有幾個格子為水就行了。那麼檢查上下左右四個格子看是否有陸地相鄰,如果沒有陸地相鄰那麼就是水。
2.2這道題在遍歷上下左右的時候一般同學可能去列舉,但是列舉寫這道題程式碼風格並不太好,像這種如果能夠想到用for迴圈的方式來遍歷,並且把判斷條件用獨立模組實現,那麼就是一個非常好的程式碼風格的體現。
2.3由於要列舉每個格子,所以時間複雜度為O(nm),n,m為圖的寬度與高度。
參考程式
面試官角度分析
這道題目主要是程式碼風格的考察,如果能夠使用for迴圈來代替if判斷實現上下左右四個格子,那麼面試官會眼前一亮,給你一個非常好的評價。
題目答案連結
www.jiuzhang.com/solutions/i…
相關題目
和為0的子矩陣
www.lintcode.com/zh-cn/probl…
島嶼的個數
www.lintcode.com/zh-cn/probl…
推薦閱讀:
- 《北美IT企業fulltime薪資大曝光》
- 《IT 簡歷模板大放送 | 《如何寫好技術簡歷》講座精華總結》
- 《offer收割機的求職祕訣 | <如何成為offer達人>講座精華總結》
- 《Google offer 如何談判?聽聽 Google recruiter 怎麼說!》
- 《面試遇到做過的題怎麼辦?》
- 《冷凍期大揭祕 | Google、FB、Amazon、Linkedin冷凍期》
- 《面試前如何瞭解一家IT企業?試試官方技術部落格!》
- 《北美IT企業intern薪資大曝光》
- 《16個behavior question 的面試官解析及tips》
- 《Google晉升機制 | 大公司如何升級打怪, 獲得晉升?》
歡迎關注我的微信公眾號:九章演算法(ninechapter)。
精英程式設計師交流社群,定期釋出面試題、面試技巧、求職資訊等