专栏 | 九章算法
网址 | 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)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等
