每日OJ题_BFS解决FloodFill②_力扣200. 岛屿数量

目录

力扣200. 岛屿数量

解析代码


力扣200. 岛屿数量

200. 岛屿数量

难度 中等

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:grid = [["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]
]
输出:1

示例 2:

输入:grid = [["1","1","0","0","0"],["1","1","0","0","0"],["0","0","1","0","0"],["0","0","0","1","1"]
]
输出:3

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 300
  • grid[i][j] 的值为 '0' 或 '1'
class Solution {
public:int numIslands(vector<vector<char>>& grid) {}
};

解析代码

遍历整个矩阵,每次找到一块陆地的时候:说明找到一个岛屿,记录到最终结果 ret 里面。

        并且将这个陆地相连的所有陆地,也就是这块岛屿,全部变成海洋。这样的话,下次遍历到这块岛屿的时候,它已经是海洋了,不会影响最终结果。

        其中变成海洋的操作,可以利用深搜或宽搜解决,其实就是力扣733. 图像渲染这道题。这样,遍历完全部的矩阵的时候, ret 存的就是最终结果。

(这里用全局bool数组来判断陆地是否被遍历过,也可以直接修改数组,面试的时候可以问面试官是否可以直接修改数组)

class Solution {int dx[4] = {0, 0 , -1, 1}; // i点加dx,dy就是i点的上下左右下标int dy[4] = {1, -1 , 0, 0};bool vis[301][301] = {false}; // 开题目范围大小int m = 0, n = 0;public:int numIslands(vector<vector<char>>& grid) {int ret = 0;m = grid.size(), n = grid[0].size();for(int i = 0; i < m; ++i){for(int j = 0; j < n; ++j){if(grid[i][j] == '1' && !vis[i][j]){++ret;bfs(grid, i, j);}}}return ret;}void bfs(vector<vector<char>>& grid, int i, int j){queue<pair<int, int>> q;q.push({ i, j });vis[i][j] = true;while (!q.empty()){auto [a, b] = q.front();q.pop();for (int i = 0; i < 4; ++i){int x = a + dx[i], y = b + dy[i];if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == '1' && !vis[x][y]){q.push({ x, y });vis[x][y] = true;}}}}
};

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

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

相关文章

蓝桥杯练习题 —— A+B问题(python)

a, b map(int, input().split()) print(a b) 所用方法 a, b map(int, input().split()) 这段代码的作用是从用户输入中获取两个整数&#xff0c;并将它们分别赋值给变量 a 和 b。让我逐步解释&#xff1a; input(): 这个函数用于从用户获取输入。程序会暂停运行&#xff0…

聊聊自己12岁车龄的福克斯

1. 2005年&#xff0c;国内进入了 福克斯 ( 参数 | 询价 ) 这台车&#xff0c;中间经历了两次换代&#xff0c;而我自己的这台车则是第一批进入国内的福克斯&#xff0c;它的到来颠覆了大家当时对汽车设计的印象&#xff0c;在十年前家用车都是捷达、桑塔纳等那些古板油腻的车…

全球变暖蓝桥杯2018省赛真题

全球变暖蓝桥杯2018省赛真题 DFS大法 全球变暖 #include <bits/stdc.h> using namespace std; #define int long long bool flag; char a[1010][1010]; int cnt,n,ans0,pre_ans0,d[4][2] {1,0,-1,0,0,1,0,-1}; void dfs(int x,int y){if(x>n||x<0||y>n||y<…

德勤:《中国AI智算产业2024年四大趋势》

2023年《数字中国建设整体布局规划》的发布&#xff0c;明确了数字中国是构建数字时代竞争优势的关键支撑&#xff0c;是继移动互联网时代以来经济增长新引擎。当我们谈论数字中国的构建&#xff0c;不仅仅是在讨论一个国家级的技术升级&#xff0c;而是关乎如何利用数字技术来…

TVM Object类型系统

在TVM Object类型系统中最重要的是三个类&#xff1a;Object、ObjectPtr、ObjectRef 为什么需要这三个类&#xff1f; 设计目的&#xff1a;为了能够在不更改python前端的情况下扩展c中的语言对象&#xff0c;且能够对任何语言对象序列化。 Object&#xff1a;编译器中所有的…

GNU Autotools 套件详解

GNU Autotools 是一套用于构建和安装软件的工具,它包括了一系列的工具,如 `autoscan`, `aclocal`, `autoconf`, `autoheader`, `automake` 等。 这些工具的目的是简化软件的编译过程,使得软件能够在不同的操作系统和硬件平台上编译和运行。 历史背景 GNU Autotools 的历史…

操作系统(第四周 第一堂)

目录 回顾 进程调度&#xff08;process schedule&#xff09; 进程角度 计算机整体——调度队列 队列图 调度程序 总结 回顾 上一篇文章的重点只有一个————进程 对进程的了解包含以下几个方面&#xff1a;1、程序如何变为进程 2、进程在内存中的存储形式 3、进…

魔法工艺 Magicraft CE基址

魔法工艺 Magicraft CE基址 游戏版本&#xff1a;0.82.7 Magicraft.CT <?xml version"1.0" encoding"utf-8"?> <CheatTable CheatEngineTableVersion"45"><CheatEntries><CheatEntry><ID>19</ID><De…

socks5代理、代理IP、游戏技术与网络安全,探讨它们在跨界电商领域中的应用和重要性

首先&#xff0c;我们来理解socks5代理。socks5代理是一种网络协议&#xff0c;它通过一个中间服务器来转发客户端的网络请求&#xff0c;从而帮助用户绕过网络审查或访问地区性内容。与其前身socks4相比&#xff0c;socks5支持更多的认证方式和更复杂的网络通信&#xff0c;包…

【网站项目】校园二手交易平台小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

力扣HOT100 - 189. 轮转数组

解题思路&#xff1a; 三次反转。 先反转一次&#xff0c;再根据 k 拆分成两部分各反转一次。 class Solution {public void rotate(int[] nums, int k) {k % nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}pu…

相机参数的意义

相机标定的意义&#xff1a; 相机标定&#xff1a;使用带有pattern的标定板来求解相机参数的过程&#xff1b;用一个简化的数学模型来代表复杂的三维到二维的成像过程&#xff1b;相机参数包括&#xff1a;相机内参&#xff08;焦距等&#xff09;&#xff0c;外参&#xff08…

node 的全局对象有哪些

node 和浏览器是两个不同的运行 js 的平台&#xff0c;对于浏览器来说&#xff0c;我们知道全局对象有window&#xff0c;对应的 node 中就是 global 常见的全局对象有 真正的全局对象 globalconsole console是宿主环境【node、浏览器】中的对象&#xff0c;所以我们在生产环…

【分布式缓存】

1. 缓存雪崩、缓存击穿与缓存穿透 1.1 缓存雪崩 缓存雪崩是指在缓存中的大量数据同时失效或过期&#xff0c;导致大量的请求直接打到数据库或后端系统&#xff0c;造成系统压力骤增&#xff0c;甚至导致系统崩溃。 原因&#xff1a; 缓存服务器宕机&#xff1a; 如果缓存服…

完全平方数(蓝桥杯,acwing,数论)

题目描述&#xff1a; 一个整数 a 是一个完全平方数&#xff0c;是指它是某一个整数的平方&#xff0c;即存在一个整数 b&#xff0c;使得 ab^2。 给定一个正整数 n&#xff0c;请找到最小的正整数 x&#xff0c;使得它们的乘积是一个完全平方数。 输入格式&#xff1a; 输…

[CUDA 学习笔记] 矩阵转置算子优化

矩阵转置算子优化 矩阵转置是一种基础的矩阵操作, 即将二维矩阵的行列进行反转. 本文主要围绕行主序的二维单精度矩阵的转置考虑相关的优化. 以下 kernel 笔者均是在 NVIDIA V100 (7.0 算力) 上进行测试的, 且选择矩阵的行列维度大小为 M2300 N1500. Version 0. 朴素实现 _…

处理慢查询时使用explain一般看哪些字段

explain之后会出现这些&#xff0c;一般就只看下面这几个字段 select_type就是查询类型&#xff0c;在我司的业务里基本上用的都是简单查询&#xff0c;在内存中处理逻辑&#xff0c;复杂查询的话排查问题比较麻烦&#xff0c;引起慢查询还会拖累数据库&#xff0c;数据库里还…

jvm运行情况预估

相关系统 jvm优化原则-CSDN博客 执行下面指令 jstat gc -pid 能计算出一些关键数据&#xff0c;有了这些数据&#xff0c;先给JVM参数一些的初始的&#xff0c;比堆内存大小、年轻代大小 、Eden和Srivivor的比例&#xff0c;老年代的大小&#xff0c;大对象的阈值&#xff0c;…

前端学习<四>JavaScript基础——05-变量的数据类型:基本数据类型和引用数据类型

数据分类 数据分为&#xff1a;静态数据、动态数据。 静态数据 静态数据是指一些永久性的数据。一般是以文件的形式存储在硬盘上&#xff0c;比如文档、照片、视频等文件。 电脑关闭后&#xff0c;静态数据仍然还在。只要不主动删掉数据或者硬盘没损坏&#xff0c;这些数据…

蓝桥杯c语言

蓝桥杯大赛是中国的一项全国性的IT竞赛&#xff0c;旨在激发大学生和中学生对计算机科学和技术的兴趣&#xff0c;提高他们的编程能力和创新思维。C语言是蓝桥杯大赛中的一个重要竞赛类别&#xff0c;通常包括程序设计、算法解决和数据结构实现等方面的内容。 ### 蓝桥杯C语言…