当前位置: 首页 > news >正文

山西省建设厅执业资格注册中心网站优化公司网站排名

山西省建设厅执业资格注册中心网站,优化公司网站排名,恩施网站建设,粮食局网站建设❓ 1020. 飞地的数量 难度:中等 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个 海洋单元格、1 表示一个 陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边…

❓ 1020. 飞地的数量

难度:中等

给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个 海洋单元格1 表示一个 陆地单元格

一次 移动 是指从一个陆地单元格走到另一个相邻()的陆地单元格或跨过 grid 的边界。

返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。

示例 1:

在这里插入图片描述

输入:grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
输出:3
解释:有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。

示例 2:

在这里插入图片描述

输入:grid = [[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
输出:0
解释:所有 1 都在边界上或可以到达边界。

提示

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 500
  • grid[i][j] 的值为 01

💡思路:DFS

本题要求找到不靠边的陆地面积,那么

  • 我们只要从周边找到陆地
  • 然后 通过 dfs 或者 bfs 将周边靠陆地且相邻的陆地都变成海洋
  • 然后再去重新遍历地图的时候,统计此时还剩下的陆地就可以了。

🍁代码:(C++、Java)

C++

class Solution {
private:int dir[4][2] = {-1, 0, 0, -1, 1, 0, 0, 1}; // 保存四个方向int m = 0, n = 0;void dfs(int i, int j, vector<vector<int>>& grid){if(grid[i][j] == 0){ // 是海洋则返回return;}grid[i][j] = 0;for(int k = 0; k < 4; k++){ // 向四个方向遍历int nexti = i + dir[k][0];int nextj = j + dir[k][1];if(nexti < 0 || nexti >= m || nextj < 0 || nextj >= n) continue;dfs(nexti, nextj, grid);}}
public:int numEnclaves(vector<vector<int>>& grid) {m = grid.size();n = grid[0].size();// 从左侧边,和右侧边 向中间遍历for(int i = 0; i < m; i++){dfs(i, 0, grid);dfs(i, n - 1, grid);}// 从上边和下边 向中间遍历for(int i = 0; i < n; i++){dfs(0, i, grid);dfs(m - 1, i, grid);}//统计剩余陆地的面积int ans = 0;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid[i][j] == 1) ans++;}}return ans;}
};

Java

class Solution {private int[][] dir = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}}; // 四个方向int m = 0, n = 0;private void dfs(int i, int j, int[][] grid){if(grid[i][j] == 0) return;// 是海洋则返回grid[i][j] = 0;for(int k = 0; k < 4; k++){// 向四个方向遍历int nexti = i + dir[k][0];int nextj = j + dir[k][1];// 超过边界if(nexti < 0 || nexti >= m || nextj < 0 || nextj >= n) continue;dfs(nexti, nextj, grid);}}public int numEnclaves(int[][] grid) {m = grid.length;n = grid[0].length;// 从左侧边,和右侧边 向中间遍历for(int i = 0; i < m; i++){dfs(i, 0, grid);dfs(i, n - 1, grid);}// 从上边和下边 向中间遍历for(int j = 0; j < n; j++){dfs(0, j, grid);dfs(m - 1, j, grid);}//统计剩余陆地的面积int ans = 0;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid[i][j] == 1) ans++;}}return ans;}
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( m n ) O(mn) O(mn),其中mn 分别是网格 grid 的行数和列数。深度优先搜索最多访问每个单元格一次,需要 O ( m n ) O(mn) O(mn) 的时间,遍历网格统计飞地的数量也需要 O ( m n ) O(mn) O(mn) 的时间。

  • 空间复杂度 O ( m n ) O(mn) O(mn),空间复杂度主要取决于递归调用栈空间,最大空间复杂度是 O ( m n ) O(mn) O(mn)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

http://www.khdw.cn/news/19523.html

相关文章:

  • 男女做那个网站动态图网上竞价
  • 镜美硅藻泥网站是那家公司做的关键词搜索爱站网
  • 深圳市专业做网站百度下载老版本
  • 企业网站建设制作设计哪家最专业厦门人才网最新招聘信息
  • 浅谈天猫的电子商务网站建设nba体育新闻
  • 闸北企业网站制作郴州seo网络优化
  • 南沙企业网站建设微信朋友圈广告30元 1000次
  • 做网站赚钱难学设计什么培训机构好
  • 做公司网站哪家好 上海seo服务外包费用
  • 潍坊网站建设价格域名历史查询工具
  • 广州市官网网站建设多少钱谷歌优化的网络公司
  • 企业网站开发介绍厦门seo蜘蛛屯
  • 如何用源码做网站百度竞价排名规则
  • 音乐制作网站广州网站推广联盟
  • 郑州网站模板优化推广什么意思
  • 网站建设参考网站的说明阳江seo
  • 电子商务网站的建设心得线下引流的八种推广方式
  • 网站的电子地图怎么做百度网络优化推广公司
  • 网站怎么做切换图片百度数据开放平台
  • 政府网站改造的意义关于进一步优化当前疫情防控措施
  • 阿里云网站模板 解析爱网站查询
  • 部门网站建设整改免费模板
  • 外贸网站模板推荐网站主题
  • 数据库网站制作郑州seo顾问外包
  • 福州网站备案全国十大跨境电商排名
  • 广州网站维护公司外汇交易平台
  • 网站建设的销售怎么做百度热门搜索排行榜
  • 有没有专门做印刷图的网站智慧软文网站
  • 做织梦网站时图片路径显示错误google海外版入口
  • 盱眙住房和城乡建设局网站各大网站推广平台