LeetCode 694. 不同岛屿的数量(BFS/DFS+set)

文章目录

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

1. 题目

给定一个非空01二维数组表示的网格,一个岛屿由四连通(上、下、左、右四个方向)的 1 组成,你可以认为网格的四周被海水包围。

请你计算这个网格中共有多少个形状不同的岛屿。
两个岛屿被认为是相同的,当且仅当一个岛屿可以通过平移变换(不可以旋转、翻转)和另一个岛屿重合。

样例 1:
11000
11000
00011
00011
给定上图,返回结果 1。样例 2:
11011
10000
00001
11011
给定上图,返回结果 3。注意:
11
11
11
是不同的岛屿,因为我们不考虑旋转、翻转操作。注释 :  二维数组每维的大小都不会超过50

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

2. 解题

  • 记录开始BFS或DFS的起点,后续点跟起点做差,存储路径到set中去重,返回 set 的大小

2.1 BFS

class Solution {
public:int numDistinctIslands(vector<vector<int>>& grid) {if(grid.empty() || grid[0].empty()) return 0;int m = grid.size(), n = grid[0].size(), i, j, k, x, y, x0, y0, nx, ny;vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};set<vector<vector<int>>> s;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){if(grid[i][j] == 0)continue;x0 = i, y0 = j;queue<vector<int>> q;vector<vector<int>> path;q.push({x0, y0});grid[x0][y0] = 0;//访问过while(!q.empty()){x = q.front()[0];y = q.front()[1];path.push_back({x-x0, y-y0});//路径记录相对坐标q.pop();for(k = 0; k < 4; ++k){nx = x + dir[k][0];ny = y + dir[k][1];if(nx>=0 && nx<m && ny>=0 && ny<n && grid[nx][ny]){q.push({nx, ny});grid[nx][ny] = 0;//访问过}}}s.insert(path);}}return s.size();}
};

172 ms 43.6 MB

2.2 DFS

class Solution {vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};int m, n;set<vector<vector<int>>> s;
public:int numDistinctIslands(vector<vector<int>>& grid) {if(grid.empty() || grid[0].empty()) return 0;m = grid.size(), n = grid[0].size();for(int i = 0, j; i < m; ++i){for(j = 0; j < n; ++j){if(grid[i][j] == 0)continue;vector<vector<int>> path;grid[i][j] = 0;//访问过DFS(grid,i,j,i,j,path);s.insert(path);}}return s.size();}void DFS(vector<vector<int>>& grid, int x0, int y0, int x, int y, vector<vector<int>>& path){path.push_back({x-x0, y-y0});//路径记录相对坐标int k, nx, ny;for(k = 0; k < 4; ++k){nx = x + dir[k][0];ny = y + dir[k][1];if(nx>=0 && nx<m && ny>=0 && ny<n && grid[nx][ny]){grid[nx][ny] = 0;//访问过DFS(grid, x0, y0, nx, ny, path);}}}
};

128 ms 35.8 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

xcode 4.2开发 ——navigation controller 添加按钮

添加一个按钮 UIBarButtonItem *rightButton [[UIBarButtonItem alloc] initWithTitle:"Add" style:UITabBarSystemItemContacts target:self action:selector(clickSettings:)]; self.navigationItem.rightBarButtonItem rightButton; 新版本xcode不用release 添…

数据分析-书籍整理(二)

业务书籍 《数据化管理-洞悉零售及电子商务》讲解了关于零售和电商的一些知识&#xff0c;有很多实用案例。很有借鉴意义。 《游戏数据分析实战》游戏各个阶段的数据分析&#xff0c;方法&#xff0c;数据来源&#xff0c;案例等。 《增长黑客》这本书我看了两遍&#xff0c…

LeetCode 1516. Move Sub-Tree of N-Ary Tree(DFS)

文章目录1. 题目2. 解题1. 题目 Given the root of an N-ary tree of unique values, and two nodes of the tree p and q. You should move the subtree of the node p to become a direct child of node q. If p is already a direct child of q, don’t change anything. …

空气质量指数(AQI)分析与预测

文章目录前言一、背景Ⅰ数据来源Ⅱ 数据背景Ⅲ 分析目的二、数据探索性分析Ⅰ 数据类型Ⅱ 描述性统计Ⅲ 数据预处理1.缺失值处理1&#xff09;删除缺失值2&#xff09;均值/中值填充2.异常值处理3.重复值处理三、数据分析Ⅰ空气质量排名Ⅱ 全国空气质量1.全国空气质量等级统计2…

如果程序跑着跑着就崩溃了,查看内存

程序跑的时间长就发生中断。 启动任务管理器&#xff0c;选择“进程”选项卡&#xff0c;查看程序的内存。 发现程序运行的过程中内存不断增长。 那么原因可能是运行过程中不断地分配了新的内存而没有释放。 查找的方法是注释代码&#xff0c;然后看内存是不是还在增长&#xf…

LeetCode MySQL解题目录

已完成的 LeetCode MySQL 数据库题目。点击查看我的 LeetCode 算法解题目录。 已解决 123/123 - 简单 54 中等 51 困难 18 前置入门学习 MySQL 基本查询、条件查询、投影查询MySQL 排序、分页查询、聚合查询MySQL 多表查询、连接查询&#xff08;内连接、外连接&#xff09;…

Anaconda3使用过程中遇到的问题

文章目录数据可视化中文、负号显示Anaconda使用pyecharts安装方法方法一&#xff1a;pip install pyecharts安装方法二&#xff1a;清华镜像安装方法三&#xff1a;离线安装成功安装后遇到的问题成功安装却不能使用不能使用某一个图&#xff1a;bar\grid决策树sklearn.exceptio…

AliasDB:简单统一灵活的数据库访问库(支持MSSQL/MySQL/SQLite/Oracle/ODBC/OleDb)适用于中小型系统...

数据库访问各种规模的应用程序不可避免的操作&#xff0c;.NET对提供了简单方便统一的数据库访问类&#xff0c;并且通过Enterprise Lib提供了更为顶层的数据库访问库。在我的人个工作中&#xff0c;现在用得最多的就是通过“动码代码生成器”对一次性生成数据库访问接口&#…

数据分析方法--回归分析方法((SPSS建模:多元线性回归案例)

文章目录回归定义最常用回归方法一、线性回归(Linear Regression)二、逻辑回归(Logistic Regression)三、多项式回归(Polynomial Regression)四、逐步回归(Stepwise Regression)五、岭回归(Ridge Regression)六、套索回归(Lasso Regression)七、回归(ElasticNet)如何正确选择回…

LeetCode MySQL 1511. Customer Order Frequency

文章目录1. 题目2. 解题1. 题目 Table: Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | | country | varchar | ------------------------ customer_id is the p…

LeetCode MySQL 1075. 项目员工 I

文章目录1. 题目2. 解题1. 题目 项目表 Project&#xff1a; ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- 主键为 (project_id, employee_id)。 employee_id 是员…

The Shapes of CSS

http://home.cnblogs.com/blog/转载于:https://www.cnblogs.com/yanyanhappy/archive/2012/09/07/2675050.html

数据分析-书籍整理(一)

入门书籍 《谁说菜鸟不会数据分析》讲解了一些常见的分析技巧&#xff0c;并附带 Excel 的一些知识以及职场可使用的基础数据分析。 《MYSQL必知必会》对于有sql基础的人来说&#xff0c;可以快速复习知识点&#xff0c;小白也能学习到很多&#xff0c;不会打击自信心。我是用…

hdu 1054 Strategic Game 最小点覆盖 = 最大二分匹配

题目地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1054 简单二分匹配&#xff0c;根据题意构造一个无向图。然后求最小点覆盖&#xff0c;然后扫描mark数组将曾经匹配的点所匹配的边消去。 最小点覆盖 最大二分匹配 #include<stdio.h> #include<strin…

数据分析统计学基础一

文章目录数据分析方法分类1、单纯的数据加工方法2、基于数理统计的数据分析方法3、基于数据挖掘的数据分析方法4、基于大数据的数据分析方法描述性统计分析1、数据的计量尺度2、数据的集中趋势3、数据的离中趋势4、数据分布的测定正态分布a. 偏态系数b. 数据峰度c. 偏度与峰度的…

LeetCode MySQL 1435. 制作会话柱状图

文章目录1. 题目2. 解题1. 题目 表&#xff1a;Sessions ------------------------------ | Column Name | Type | ------------------------------ | session_id | int | | duration | int | ------------------------------ sessio…

SharePoint2010网站备份还原简单介绍

今天尝试了SharePoint2010网站的备份和还原&#xff0c;从网上搜一些文档看看&#xff0c;然后自己试试&#xff0c;感觉和2007的操作没什么太大的区别&#xff0c;跟大家分享下自己尝试的命令行方式和数据库的方式&#xff0c;2007自己常用的也是这两种方式。 1、 命令行的方式…

LeetCode MySQL 1211. 查询结果的质量和占比

文章目录1. 题目2. 解题1. 题目 查询表 Queries&#xff1a; ---------------------- | Column Name | Type | ---------------------- | query_name | varchar | | result | varchar | | position | int | | rating | int | ---------------------…

数据分析方法-聚类算法

文章目录一、定义二、聚类、分类区别分类三、聚类常用算法1.划分聚类 k-means、k-medoids、k-modes、k-medians、kernel k-means2.层次聚类 Agglomerative 、divisive、BIRCH、ROCK、Chameleon3.密度聚类 DBSCAN、OPTICS5.模型聚类 GMM6.图聚类 Spectral Clustering&#xff08…

Java6 WebService学习

参考了网络上中资料&#xff0c;自己学习实践了一个Java6 WebService. 首先&#xff0c;建立一个WebService: package garfield;import javax.jws.WebService;import javax.xml.ws.Endpoint;WebServicepublic class MyJ6WebService {public String SayHello(String strName) {r…