问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3794 访问。

给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

[[0,1,0,0],
 [1,1,1,0],
 [0,1,0,0],
 [1,1,0,0]]

答案: 16

解释: 它的周长是下面图片中的 16 个黄色的边:


You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represents water. Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounded by water, and there is exactly one island (i.e., one or more connected land cells). The island doesn't have "lakes" (water inside that isn't connected to the water around the island). One cell is a square with side length 1. The grid is rectangular, width and height don't exceed 100. Determine the perimeter of the island.

[[0,1,0,0],
 [1,1,1,0],
 [0,1,0,0],
 [1,1,0,0]]

Answer: 16

Explanation: The perimeter is the 16 yellow stripes in the image below:


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3794 访问。

public class Program {public static void Main(string[] args) {var points = new int[,] {{0, 1, 0, 0},{1, 1, 1, 0},{0, 1, 0, 0},{1, 1, 0, 0}};var res = IslandPerimeter(points);Console.WriteLine(res);Console.ReadKey();}public static int IslandPerimeter(int[,] grid) {if(grid.Length == 0) return 0;var m = grid.GetLength(0);var n = grid.GetLength(1);var res = 0;for(var i = 0; i < m; ++i) {for(var j = 0; j < n; ++j) {if(grid[i, j] == 0) continue;if(j == 0 || grid[i, j - 1] == 0) ++res;if(i == 0 || grid[i - 1, j] == 0) ++res;if(j == n - 1 || grid[i, j + 1] == 0) ++res;if(i == m - 1 || grid[i + 1, j] == 0) ++res;}}return res;}}

以上给出1种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3794 访问。

16

分析:

注意该题的隐含条件是给定的数组中有且仅有一个岛屿。另外可以使用减法求解,遇到岛屿+4,遇到相邻-1。

显而易见,以上算法的时间复杂度为: 

C#LeetCode刷题之#463-岛屿的周长​​​​​​​(Island Perimeter)相关推荐

  1. [Swift]LeetCode463. 岛屿的周长 | Island Perimeter

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. C#LeetCode刷题-哈希表

    哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串   24.2% 中等 18 四数之和   ...

  3. Leetcode刷题 463题:岛屿的周长(基于Java语言)

    ** Leetcode刷题 463题:岛屿的周长(基于Java语言) ** 一. 题目描述: 给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相 ...

  4. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  5. LeetCode刷题笔记汇总

    LeetCode刷题笔记汇总 第一次刷LeetCode写的一些笔记. 1.两数之和 3.无重复字符的最长子串 15.三数之和 18.四数之和 19.删除链表的倒数第 N 个结点 20.有效的括号 21 ...

  6. ​LeetCode刷题实战314:二叉树的竖直遍历

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. Leetcode刷题

    刷题 leetcode 1.两数之和 #哈希表 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int ...

  8. 个人LeetCode刷题记录(带题目链接及解答)持续更新

    Leetcode 刷题 注:~[完成]代表还有一些方法没看,最后再看 一.一些需要重刷的典型题: 1.快速排序,归并排序,堆排序(递归的思想) 2.链表中的回文链表,其中的快慢指针,多看,多练 3.链 ...

  9. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

最新文章

  1. 开启Web金库:互联网业务成功之道——前言
  2. 160个Crackme014
  3. 北斗导航 | GPS卫星导航技术重要人物简介
  4. phpword中设置间距_管道支、吊架的安装间距规范上如何规定?
  5. 软件测试系列之四 单元测试(Junit)
  6. php简单分页,php简单实现分页查询的方法
  7. .net core 2.0学习记录(一):搭建一个.Net Core网站项目
  8. 芝麻当家运营级商城源码/H5/小程序/网页
  9. 知云文献阅读器_知云文献翻译
  10. 【Vue.js】iconfont中unicode引用和unicode引用失败,无法显示icon
  11. React中的图片懒加载
  12. 涠洲岛日出日落时间表_涠洲岛日出日落
  13. Exception: ROM is missing for pong, see https://github.com/openai/atari-py#roms for instructions
  14. html5 css图片倒影,CSS3----图片倒影效果
  15. 【leetcode】解数独
  16. HD2500显卡驱动linux,intel hd 2500驱动下载
  17. Android 双屏异显(兼容android8)
  18. Java HashMap中在resize()时候的rehash,即再哈希法的理解
  19. 分享一个自媒体副业,认真做可以月入6000+
  20. Android事件分发机制在实战开发中的应用之一

热门文章

  1. Leetcode算法题(C语言)15--字符串中的第一个唯一字符
  2. 文本的数据导入到数据库中 mysql
  3. 抽象 java 1614868764
  4. comboBox绑定对象数组 c# 1614065159
  5. 1218数据库操作工具类的使用
  6. 开通qq邮箱的smtp服务的流程详情
  7. 爬虫,反爬工具fake-useragent,随机useragent模块教程
  8. 连载13:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...
  9. J2EE实现发送邮件功能
  10. SQL表名,应该用复数还是单数