Facebook 面試題 | 島的周長

專欄 | 九章算法
網址 | www.jiuzhang.com程序員

題目描述面試

以二維整數網格的形式給出地圖,1表明陸地,0表明水。
網格單元水平/垂直鏈接(不包含對角)。
整張地圖被水徹底包圍,而且有一個島(即一個或多個鏈接的陸地單元)。
島上沒有「湖泊」(裏面的水沒有鏈接到島外的水)。
一個單元格是邊長爲1的正方形。
網格爲矩形,寬度和高度不超過100。
肯定島嶼的周長。算法

樣例微信

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

輸出:
16code

樣例解釋:
樣例輸入的島嶼的周長爲16,如圖中黃線所示。cdn

解題思路 blog

2.1 題目中對於周長的定義爲陸地和水邊界的地方,那麼咱們就能模擬題意,枚舉全部的格子,對於每一個爲陸地的格子,判斷周圍有幾個格子爲水就好了。那麼檢查上下左右四個格子看是否有陸地相鄰,若是沒有陸地相鄰那麼就是水。面試技巧

2.2這道題在遍歷上下左右的時候通常同窗可能去枚舉,可是枚舉寫這道題代碼風格並不太好,像這種若是可以想到用for循環的方式來遍歷,而且把判斷條件用獨立模塊實現,那麼就是一個很是好的代碼風格的體現。ip

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…

推薦閱讀:



歡迎關注個人微信公衆號:九章算法(ninechapter)。
精英程序員交流社區,按期發佈面試題、面試技巧、求職信息等

九章算法,IT教育領域的深耕者
相關文章
相關標籤/搜索