算法:岛屿的周长

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、问题描述

二、规律总结

总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、问题描述

给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

输入:
[[0,1,0,0],
 [1,1,1,0],
 [0,1,0,0],
 [1,1,0,0]]
输出: 16

二、规律总结

解题思路:

这个题很典型的有规律,我们看上图,可以看到每个黄色的格子有四个边,周长为4,如果两个格子挨着,那么有一个边是重合的,这个边的长度就消失了,所以如果是两个格子挨着,总周长就是4*2 - 1*2。

4代表:每个格子的周长,是固定值

第一个2代表:黄色格子的数量,是变量

1代表:黄色格子重合的边数,是变量

第二个2代表:消失的数量,是固定值

可以再继续增加格子,规律都不会变,那么我们的重点就变成统计黄色格子的数量,以及黄色格子重合的边数。

如果数组中的元素为1代表黄色格子,那么统计黄色格子的数量,即是统计1的数量

统计黄色格子重合的边数,在做这个事情的时候,我们要选取一个方向,举个例子,第二排的前三个黄色格子,我们在第一个格子的视角来看,右边的格子有一条边跟他重合,在中间格子的视角来看,左右格子都有一条边跟他重合,在第三个格子的视角来看,左边的格子有一条边跟他重合。

那么我们不妨设定一个方向,从左到右,不回头看,依次从第一个格子,第二个格子,第三个格子的视角来看,只有2条边是重合的。

垂直方向的类似。

代码示例:

public void test() {int[][] grid = {{0, 1, 0, 0}, {1, 1, 1, 0}, {0, 1, 0, 0}, {1, 1, 0, 1}};// 记录岛屿的数量, 即数组中1的数量int count = 0;// 记录岛屿块之间重合的边数int num = 0;for (int i = 0; i < grid.length; i++) {for (int j = 0; j < grid[i].length; j++) {if (grid[i][j] == 1) {// 记录岛屿的数量+1count++;// 横向方向, 下一个节点是1, 则计数器+1if (i < grid.length - 1 && grid[i + 1][j] == 1) {num++;}// 垂直方向, 下一个节点是1, 则计数器+1if (j < grid[i].length - 1 && grid[i][j + 1] == 1) {num++;}}}}// 岛屿的周长 = 岛屿的数量 * 4 - 重合的边数 * 2int len = count * 4 - num * 2;System.out.println(len);
}

总结

注释已加好,抓紧练习,简单到有手就行!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/315185.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【接口自动化】写接口自动化case要注意的点!

可能有人会说&#xff0c;写接口的自动化CASE多简单了&#xff0c;写个参数发送请求完事了&#xff0c;还要注意啥&#xff1f; 没错&#xff0c;相比起UI自动化的case&#xff0c;你要去写各种定位器&#xff0c;接口自动化的case写起来确实容易多了。这也是接口自动化的一个…

羊奶能降低熬夜伤肝带来的伤害吗?

羊奶能降低熬夜伤肝带来的伤害吗&#xff1f; 熬夜已成为现代人生活中的一部分&#xff0c;然而&#xff0c;长期熬夜对身体健康的危害也不容忽视。其中&#xff0c;肝脏作为人体重要的器官之一&#xff0c;承担着排毒、合成重要蛋白质和代谢脂肪等重要功能。长期熬夜所带来的…

RAG LLM App开发实战

大型语言模型&#xff08;LLM&#xff09;无疑改变了我们与信息交互的方式。 然而&#xff0c;对于我们可以向他们提出的要求&#xff0c;它们也有相当多的限制。 LLM&#xff08;例如 Llama-2-70b、gpt-4 等&#xff09;仅了解他们接受过训练的信息&#xff0c;当我们要求他们…

ROS学习记录:ROS系统中的激光雷达消息包的数据格式

一、在工作空间中输入source ./devel/setup.bash 二、输入roslaunch wpr_simulation wpb_simple.launch打开机器人仿真环境 三、机器人仿真环境打开成功 四、给机器人围上一圈障碍物 五、再打开一个工作空间终端 六、输入roslaunch wpr_simulation wpb_rviz.launch打开RViz 七、…

C#_var

文章目录 一、前言二、隐式类型的局部变量2.1 var和匿名类型2.2 批注 三、总结 一、前言 C#中有一个 var 类型&#xff0c;不管什么类型的变量&#xff0c;都可以用它接收&#xff0c;实属懒人最爱了。 我没有了解过它的底层&#xff0c;甚至没看过它的说明文档&#xff0c;也…

25W以下室内照明应用解决方案:SM2188EN符合新ERP认证标准

随着LED照明技术的不断发展&#xff0c;室内照明领域的需求也在不断增加。针对25W以下室内照明应用&#xff0c;LED驱动芯片SM2188EN是一款新型的解决方案&#xff0c;符合最新的ERP认证标准&#xff0c;能够满足用户对照明产品高效、节能、稳定的需求。 SM2188EN方案原理图 L…

租房数据分析可视化大屏+58同城 Django框架 大数据毕业设计(附源码)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK修改图像像素格式Mono8或者Mono10(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK修改图像像素格式Mono8或者Mono10&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像像素格式的技术背景CameraExplorer如何查看修改相机图像像素格式信息在NEOAPI SDK里通过函数修改图像像素格式修改像素格式测试演…

Linux/Unix/国产化操作系统常用命令(一)

目录 前言Unix操作系统UNIX与Linux的亲密关系UNIX/Linux系统结构1) 内核层2) Shell层3) 应用层 常见Linux发行版本有哪些1) Red Hat Linux2) Ubuntu Linux3) SuSE Linux4) Gentoo Linux5) 其他 Linux 发行版Linux 发行版本的选择选择CentOS 系统 前言 前段时间到南京出了趟急差…

「MySQL运维常见问题及解决方法」

「MySQL运维常见问题及解决方法」 一、查看MySQL数据库安装路径1.1、方式一 --SHOW VARIABLES LIKE basedir;1.2、方式二 --ps -ef | grep mysql 二、MySQL设置连接数与最大并发数2.1、永久生效--修改my.cnf文件2.2、临时生效--通过命令设置的全局变量 三、其他相关参数设置四、…

服务器被入侵后如何查询连接IP以及防护措施

目前越来越多的服务器被入侵&#xff0c;以及攻击事件频频的发生&#xff0c;像数据被窃取&#xff0c;数据库被篡改&#xff0c;网站被强制跳转到恶意网站上&#xff0c;网站在百度的快照被劫持等等的攻击症状层出不穷&#xff0c;在这些问题中&#xff0c;如何有效、准确地追…

聊一下JVM调优

闲聊一下&#xff1a; 这个JVM 相信大家都了解过 但是很少用这个东西 但是面试 一些高级架构师又是必问的一些问题 之前一直不了解这个东西 感觉就是面试造火箭 实际拧螺丝 用于筛选人才 毕业这么多年 也是很少接触这些 就大学的时候学过 简单了解过一些底层 &#xff0c;找工…