​LeetCode解法汇总面试题 16.19. 水域大小

news2024/12/22 13:23:15

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。

示例:

输入:
[
  [0,2,1,0],
  [0,1,0,1],
  [1,1,0,1],
  [0,1,0,1]
]
输出: [1,2,4]

提示:

  • 0 < len(land) <= 1000
  • 0 < len(land[i]) <= 1000

解题思路:

* 解题思路:

* 因为担心递归遍历会导致堆栈溢出,所以采取的队列的方式。

* 遍历每个点,如果是海域则加入到queue中,并且记录size=1,然后取出queue中的头部,每个点都向周围8个方向探测,如果也为海域,则也加入到queue中,并且size+1;

* 最后把size加入到record中。

代码:

class Solution_MS_1619
{
public:
    static constexpr int directions[8][2] = {{1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}};

    vector<int> pondSizes(vector<vector<int>> &land)
    {
        vector<int> record;
        for (int y = 0; y < land.size(); y++)
        {
            for (int x = 0; x < land[0].size(); x++)
            {
                if (land[y][x] != 0)
                {
                    continue;
                }
                int size = 1;
                queue<pair<int, int>> qu;
                qu.push(make_pair(x, y));
                land[y][x] = 1;
                while (!qu.empty())
                {
                    pair<int, int> top = qu.front();
                    qu.pop();
                    for (int i = 0; i < 8; i++)
                    {
                        int nx = top.first + directions[i][0];
                        int ny = top.second + directions[i][1];
                        if (nx < 0 || ny < 0 || nx >= land[0].size() || ny >= land.size())
                        {
                            continue;
                        }
                        if (land[ny][nx] == 0)
                        {
                            size++;
                            land[ny][nx] = 1;
                            qu.push(make_pair(nx, ny));
                        }
                    }
                }
                record.push_back(size);
            }
        }
        sort(record.begin(), record.end());
        return record;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring boot引入swagger报错处理

目录 1. 报错说明 2. 查找原因 2.1 此前笔者的代码 3. 问题解决说明 4. 解决方案 4.1 在pom.xml引入springdoc包 4.2 创建配置文件&#xff08;可省略&#xff09; 4.3 在controller加入注解 4.4 查看接口文档 4.5 常用注解 1. 报错说明 在java项目中引入swagger 2.9.2…

Linux设置进程名称(标题) ( 7) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

技术管理三板斧之第一板斧拿结果-定目标

一、现状&#xff1a; 去年年底今年年初&#xff0c;帮助一家公司做了一次大的系统重构&#xff0c;30多小伙伴&#xff0c;经历一次洗礼&#xff0c;对产品定位&#xff0c;技术选型&#xff0c;目标制定&#xff0c;任务分配&#xff0c;协同开发&#xff0c;测试上线&#x…

JS 启动一个计时器来跟踪某一个操作的占用时长

文章目录 需求分析代码 需求 JS 中想要记录一个操作的占用时长 分析 可以启动一个计时器console.time(name:string)来跟踪某一个操作的占用时长。每一个计时器必须拥有唯一的名字&#xff0c;页面中最多能同时运行 10,000 个计时器。 当以此计时器名字为参数调用 console.timeE…

蓝桥杯专题-试题版-【龟兔赛跑预测】【回形取数】【阶乘计算】【矩形面积交】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

计算机的性能指标

计算机的主要性能指标: 机器字长: 指参与运算的基本数位, 它是由加法器, 寄存器的数位决定的, 所以及其资产一般等于内部寄存器的大小 数据路通宽度: 数据总线一次能够并行传送信息的位数, 这里所说的数据通路宽度实际是指外部数据总线的宽度 主存容量: 一个存储器所能存储的…

C语言王国探险记之常量的四大护卫

王国探险记系列 文章目录&#xff08;3&#xff09; 前言 一、常量是什么&#xff1f; 二、常量的第一护卫&#xff1a;字面常量 1.什么是字面常量? 三、常量的第二护卫&#xff1a;const修饰的常变量 1.什么是const修饰的常变量? 2&#xff0c;证明const修饰的常变量…

nginx部署多个前端项目

前端采用vue框架&#xff0c;主要介绍在同一个ipport下&#xff08;或域名&#xff09;&#xff0c;通过访问不同的子路径部署多个项目 把前端打包好的项目直接放进 nginx/html 目录下面&#xff0c; 下面展示根据不同的路由模式的nginx配置&#x1f447; 路由采用hash模式 浏…

基于深度学习YOLOv5电动车头盔佩戴检测设计毕业设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;625头盔 获取完整源码源文件标注好的数据集(在源码文件夹->yolov5-5.0->VOCdevkit)优秀论文答辩PPT及文稿等 设计总说明 在许多非机动车交通事故中&#xff0c;未佩戴头盔是造成驾驶人受伤或死亡的主要原因&#xf…

永磁电机中的磁钢

稀土永磁最大的应用领域就是永磁电机&#xff0c;电机俗称马达&#xff0c;广义上的电机包含了将电能转换成机械能的电动机&#xff0c;和将机械能转换成电能的发电机&#xff0c;不管是电动机还是发电机&#xff0c;都是利用电磁感应定律或电磁力定律作为基础原理的电气设备。…

【教学类-36-02】动物头饰制作(midjounery动物简笔画四图)

作品展示 &#xff08;用midjounery动物简笔画四图作为头饰上的动物&#xff0c;正方形折纸的辅助黏贴物&#xff09; 背景需求&#xff1a; 1、用midjounery生成简笔画动物图案&#xff08;四张预览&#xff09; 2、收集各种不同的动物的一张图片.png 3、设计一款中班幼儿用…

python spider 爬虫 之 解析 xpath 、jsonpath、BeautifulSoup (-)

Xpath 插件下载及安装 下载地址&#xff1a;https://chrome.zzzmh.cn/info/hgimnogjllphhhkhlmebbmlgjoejdpjl 安装xpath 如果下载的xpath后缀是crx 格式的&#xff0c; 直接改成zip格式&#xff0c;然后直接拖拽到上面的界面中便可&#xff0c; 查看是否安装成功&#xff0c…

DOM操作——获取元素的方式

关注“大前端私房菜”微信公众号&#xff0c;回复暗号【面试宝典】即可免费领取107页前端面试题。 DOM-文档对象模型 DOM&#xff08;Document Object Model&#xff09;&#xff1a;文档对象模型 其实就是操作 html 中的标签的一些能力&#xff0c;或者说是一整套操作文档流的…

10年内打造量子超级计算机,行吗?

光子盒研究院 在未来十年内&#xff0c;微软打算建造一台量子超级计算机。 本周四&#xff0c;微软制定了一个开发自己的量子超级计算机的战略蓝图。设计它的团队将花费至少10年的研究时间&#xff0c;来建造一台能够每秒进行一百万次可靠量子操作的机器。 微软声称&#xff0c…

C++的access()函数

文章目录 函数功能头文件函数原型参数说明示例 函数功能 确定文件是否存在或者判断读写执行权限&#xff1b;确定文件夹是否存在即&#xff0c;检查某个文件的存取方式&#xff0c;比如说是只读方式、只写方式等。如果指定的存取方式有效&#xff0c;则函数返回0&#xff0c;否…

津津乐道设计模式 - 观察者模式详解(学会察言观色再也不怕女朋友生气了)

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

Nginx 优化配置及详细注释~转

Nginx 优化配置及详细注释 转https://www.cnblogs.com/taiyonghai/p/5610112.html Nginx 的nginx.conf文件&#xff0c;是调优后的&#xff0c;具体影响已经写清楚注释&#xff0c;可以拿来用&#xff0c;有一些设置无效&#xff0c;我备注上了&#xff0c;不知道是不是版本的…

《kafka 核心技术与实战》课程学习笔记(七)

生产者压缩算法 怎么压缩&#xff1f; 压缩&#xff08;compression&#xff09;秉承了用时间去换空间的经典 trade-off 思想&#xff0c;具体来说就是用 CPU 时间去换磁盘空间或网络 I/O 传输量&#xff0c;希望以较小的 CPU 开销带来更少的磁盘占用或更少的网络 I/O 传输。…

初识mysql数据库之基础操作

目录 一、库的操作 1. 创建数据库 2. 数据库的编码集 2.1 数据库的编码问题 2.2 查看系统默认字符集和校验规则 2.3 创建数据库时指定字符集和校验集 2.4 校验规则对数据库的影响 3. 进入数据库 4. 确认自己当前所处的数据库 5. 修改数据库的编码集 6. 查看创建数据…

FPGA解码MIPI视频 OV5647 2line CSI2 720P分辨率采集 提供工程源码和技术支持

目录 1、前言2、Xilinx官方主推的MIPI解码方案3、本 MIPI CSI2 模块性能及其优越性4、我这里已有的 MIPI 编解码方案5、详细设计方案6、vivado工程介绍7、上板调试验证8、福利&#xff1a;工程代码的获取 1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI…