专栏名称: 九章算法
专业的北美IT求职经验分享、技术交流社区,帮助你找到好的IT工作。由硅谷顶尖IT企业工程师维护。提供专业的算法培训/面试咨询,官网 www.jiuzhang.com
目录
相关文章推荐
九章算法  ·  TikTok硬刚国会!特朗普舍身取义露底牌! ·  3 天前  
九章算法  ·  进厂押题率超99%!《刷题宝典》限时免费! ·  2 天前  
九章算法  ·  job market大放水来了! ·  3 天前  
51好读  ›  专栏  ›  九章算法

Facebook 面试题 | 岛的周长

九章算法  · 公众号  · 算法  · 2017-05-18 07:15

正文

作者:施助教&本助教

编辑:Afra Tao & Ivy Xu

专栏:九章算法


题目描述

以二维整数网格的形式给出地图,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判断实现上下左右四个格子,那么面试官会眼前一亮,给你一个非常好的评价。


题目答案链接

http://www.jiuzhang.com/solutions/island-perimeter/


相关题目

和为0的子矩阵

http://www.lintcode.com/zh-cn/problem/submatrix-sum


岛屿的个数

http://www.lintcode.com/zh-cn/problem/number-of-islands/



 
更多精彩内容


  • 回复“简历”,查看简历撰写指南,获取“简历模板”

  • 回复“冷冻期”,查看北美各大IT企业冷冻期信息和注意事项

  • 回复“Career”, 查看Caireer Fair 攻略 check list

  • 回复“薪资”,查看北美各大IT企业New Grades Engineer 薪资水平;

  • 回复“项目”,查看7-14天可以搞定的小项目推荐

  • 回复“评分”,查看系统设计评分指南

  • 回复“behavior”,查看behavior interview指南

  • 回复“晋升”,查看Engineer晋升机制 


九章算法 帮助更多中国人找到好工作


《Big Data 项目实战班》

《九章算法班》

《系统设计班》


正在报名中!

报名登陆官网 www.jiuzhang.com

或点击文末“阅读原文”