LeetCode 200. 岛屿数量(图的遍历)

文章目录

    • 1. 题目信息
    • 2. 解题
      • 2.1 DFS
      • 2.2 BFS

1. 题目信息

给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例 1:输入:
11110
11010
11000
00000输出: 1示例 2:输入:
11000
11000
00100
00011输出: 3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 DFS

图的连通性问题,主程序启动DFS,一次搜索中,遇到1的点将其置为0(只寻找1的点),后面不会再重复查找,对上下左右的点(如果存在且为1)递归查找。主程序中启动DFS的次数即为答案。
在这里插入图片描述

class Solution
{
public:int numIslands(vector<vector<char>>& grid){int i, j, numofislands = 0;for(i = 0; i < grid.size(); ++i){for(j = 0; j < grid[i].size(); ++j){if(grid[i][j] == '1'){numofislands++;dfs(grid,i,j);}}}return numofislands;}void dfs(vector<vector<char>>& grid, int i, int j){grid[i][j] = '0';//标记走过了,修改了地图(不影响解题)if(i-1 >= 0 && grid[i-1][j] == '1')dfs(grid,i-1,j);if(j-1 >= 0 && grid[i][j-1] == '1')dfs(grid,i,j-1);if(i+1 < grid.size() && grid[i+1][j] == '1')dfs(grid,i+1,j);if(j+1 < grid[i].size() && grid[i][j+1] == '1')dfs(grid,i,j+1);}
};

2.2 BFS

同样的采用BFS,对点1的四周存在且为1的点入队,迭代查找
竟然超时了,有坑的代码请查看我的解题评论。
在这里插入图片描述
找到为1的点,第一时间置0,不要等到出队的时候再置0,会造成其他周围的几个点没有及时置0,造成的重复入队,效率降低。

class Solution//BFS
{
public:int numIslands(vector<vector<char>>& grid){if(grid.empty())return 0;int i, j, r, c, numofislands = 0;int x = grid.size(), y = grid[0].size();queue<pair<int,int> > q;for(i = 0; i < x; ++i){for(j = 0; j < y; ++j){if(grid[i][j] == '1'){numofislands++;q.push({i,j});while(!q.empty()){r = q.front().first;c = q.front().second;//grid[r][c] = '0';//标记走过了(不要写在这里,否则,会重复检查很多遍)q.pop();if(r-1 >= 0 && grid[r-1][c] == '1'){q.push({r-1,c});grid[r-1][c] = '0';//写在这里,找到了就马上第一时间标记}if(c-1 >= 0 && grid[r][c-1] == '1'){q.push({r,c-1});grid[r][c-1] = '0';}if(r+1 < x && grid[r+1][c] == '1'){q.push({r+1,c});grid[r+1][c] = '0';}if(c+1 < y && grid[r][c+1] == '1'){q.push({r,c+1});grid[r][c+1] = '0';}}}}}return numofislands;}
};

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

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

相关文章

论文浅尝 | 引入“引用”的语言模型

笔记整理&#xff1a;杨帆&#xff0c;浙江大学硕士&#xff0c;研究方向知识图谱.论文链接&#xff1a;https://arxiv.org/pdf/1611.01628.pdf动机Referring expression&#xff08;RE&#xff09;在自然语言中十分常见&#xff0c;并且在信息交流中扮演了十分重要的角色&…

短文本语义匹配/文本相似度框架(SimilarityNet, SimNet),基于bow_pairwise模式及框架原理介绍

用PaddlePaddle实现段文本语义匹配Simnet模型 https://aistudio.baidu.com/aistudio/projectdetail/124373 Hinge loss&#xff1a; https://blog.csdn.net/hustqb/article/details/78347713 原文链接&#xff1a;https://blog.csdn.net/qq_33187136/article/details/10677043…

卖萌屋招人啦!

萌萌的小夕突然出现&#xff5e;这次来寻找小伙伴一起建设小屋啦&#xff01;本期提供四种通道可直达卖萌屋核心腹地&#xff01;小编/作者日常&#xff1a;发现&#xff0c;拍脑袋&#xff0c;然后写写写外部投稿的审核与编辑基本条件&#xff1a;对NLP、CV、IR、Rec、Ads、DM…

LeetCode 36. 有效的数独(哈希)

文章目录1. 题目信息2. 解题2.1 暴力3次遍历查找2.2 一次遍历查找1. 题目信息 判断一个 9x9 的数独是否有效。只需要根据以下规则&#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线…

如何从0到1设计一个类Dubbo的RPC框架

之前分享了如何从0到1设计一个MQ消息队列&#xff0c;今天谈谈“如何从0到1设计一个Dubbo的RPC框架”&#xff0c;重点考验&#xff1a; 你对RPC框架的底层原理掌握程度。 以及考验你的整体RPC框架系统设计能力。 RPC和RPC框架 1.RPC&#xff08;Remote Procedure Call&#x…

shell脚本实现命令的自动执行

背景&#xff1a;在我傻傻的手工执行命令整整一天手腕都有点疼之后发现shell这个大宝贝简直开心的不得了 1. 关于shell脚本的使用&#xff1a; 一、编写完成的shell脚本放到脚本要执行的文件的相同目录下 二、注意shell脚本的编码问题&#xff08;windows和mac下编写的脚本格式…

论文征集 | 2019 Joint International Semantic Technology Conference

第九届国际语义技术联合会议将于今年十一月在美丽的杭州召开&#xff0c;现在征集优秀的研究论文&#xff0c;本届会议还专门设置了special session track&#xff0c;优秀论文将被推荐到SCI期刊发表&#xff0c;敬请赐稿&#xff01;http://jist2019.openkg.cn/The Joint Inte…

阿里P8架构师谈:主流RPC框架详解,以及与SOA、SOAP、REST的区别

什么是RPC RPC&#xff08;Remote Procedure Call Protocol&#xff09;——远程过程调用协议&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。 简言之&#xff0c;RPC使得程序能够像访问本地系统资源一样&#xff0c;去…

LeetCode 322. 零钱兑换(DP)

文章目录1. 题目信息2. 解题2.1 回溯穷举2.2 动态规划1. 题目信息 给定不同面额的硬币 coins 和一个总金额 amount。 编写一个函数来计算可以凑成总金额所需的最少的硬币个数。 如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1。 示例 1: 输入: coins [1, 2, 5], …

服务器使用

杀死用户lyli的所有进程 killall -u lyli杀是PID为19347的进程 kill -s 9 19347查看CPU的使用情况 free -h 查看进程实时情况 top一般有用的就这两个&#xff0c;RES是实际占了多少内存&#xff0c;%CPU除以100%就是占了多少块CPU

可以闭眼入的O'REILLY机器学习神书出新版了!

传说中的机器学习“四大名著”中最适合入门的一本——“蜥蜴书”新版来了&#xff01;这本书的英文原版是美国亚马逊AI霸榜图书&#xff0c;在人工智能、计算机神经网络、计算机视觉和模式识别三大榜单中&#xff0c;均为榜首&#xff01;国内外好评率均超过90%&#xff01;读者…

论文浅尝 | 基于知识库的神经网络问题生成方法

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为跨语言知识图谱问答。来源&#xff1a;NLPCC2018链接&#xff1a;http://tcci.ccf.org.cn/conference/2018/papers/EV7.pdf问题背景与动机作者认为&#xff0c;目前的问题语料生成主要依赖于人…

何使用BERT模型实现中文的文本分类

原文网址&#xff1a;https://blog.csdn.net/Real_Brilliant/article/details/84880528 如何使用BERT模型实现中文的文本分类前言Pytorchreadme参数表算法流程1. 概述2. 读取数据3. 特征转换4. 模型训练5. 模型测试6. 测试结果7. 总结前言 Google官方BERT代码&#xff08;Tenso…

LeetCode 152. 乘积最大子序列(DP)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个整数数组 nums &#xff0c;找出一个序列中乘积最大的连续子序列&#xff08;该序列至少包含一个数&#xff09;。 示例 1:输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2:输入: [-2,0,-1] 输出: 0 解释…

YouTube深度学习推荐系统的十大工程问题

文 | 王喆源 | https://zhuanlan.zhihu.com/p/52504407这篇文章主要介绍了YouTube深度学习系统论文中的十个工程问题&#xff0c;为了方便进行问题定位&#xff0c;我们还是简单介绍一下背景知识&#xff0c;简单回顾一下YouTube的深度推荐系统论文Deep Neural Networks for Yo…

RPC框架的实现原理,及RPC架构组件详解

RPC的由来 随着互联网的发展&#xff0c;网站应用的规模不断扩大&#xff0c;常规的垂直应用架构已无法应对&#xff0c;分布式服务架构以及流动计算架构势在必行&#xff0c;亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时&#xff0c;只需一个应…

论文浅尝 | 时序与因果关系联合推理

论文笔记整理&#xff1a;李昊轩&#xff0c;南京大学硕士&#xff0c;研究方向为知识图谱、自然语言处理。来源&#xff1a;ACL2018链接&#xff1a;https://www.aclweb.org/anthology/P18-1212动机理解事件之间的时间和因果关系是一项基本的自然语言理解任务。由于原因一定先…

LeetCode 64. 最小路径和(DP)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个包含非负整数的 m x n 网格&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例:输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释…

加快读博失败的10种方法

文 | 德先生源 | 知乎博士难毕&#xff0c;全球皆如此。差不多每个学校都有1/3到一半的博士研究生拿不到学位。读博失败不仅本人难受&#xff0c;导师也不好过。为了帮助自己的博士生们顺利毕业&#xff0c;犹他大学的Matt Might教授&#xff08;计算机科学家&#xff0c;生物学…

要成为一个 Java 架构师得学习哪些知识以及方法?

“ 最近在架构师线下实战中&#xff0c;被问到最多的一个问题&#xff0c;就是要成为一个 Java 架构师得学习哪些知识&#xff0c;以及怎样才能做到架构师这个级别&#xff1f; 今天主要澄清几个关于架构师的几大误区。 架构师并不是人人都能做到的&#xff0c;如果你能走到…