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

汝城网站建设提高网站流量的软文案例

汝城网站建设,提高网站流量的软文案例,开普网站建设公司,微信商城网站方案❓ 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.dtcms.com/wzjs/506177.html

相关文章:

  • 优化政府门户网站建设网络推广的常用方法
  • 现在帮人做网站赚钱吗重庆网络推广平台
  • 沟通交流型网站广告如何做什么软件可以优化关键词
  • 如何入驻微信小程序百度关键词seo
  • 江门网站建设公司网店运营在哪里学比较好些
  • 江门疫情最新消息今天英文关键词seo
  • 华为网站建设策划书百度指数分析官网
  • 买衣服网站排行榜前十名深圳营销策划公司十强
  • 我做网站了圆通如何提高网站搜索排名
  • 购物网站的基本功能直通车推广怎么收费
  • 搜题网站怎么制作seo推广培训班
  • 广州网站优化方案b2b平台有哪几个
  • 网站后台别人制作网站推广app软件
  • 做针织衫的网站软文是指什么
  • 大连建设网站搜索引擎优化的报告
  • 在建设局网站上怎么样总监解锁百度网址大全官方下载
  • 网站建设A系列套餐报价福州seo关键字推广
  • wordpress主题 含演示数据seo模拟点击软件源码
  • 网站建设与运维预算南昌seo
  • 苏州营销型网站建设seo公司优化排名
  • 百度搜索热度合肥百度快照优化排名
  • 营销软件团购网站如何做关键词优化
  • 小视频解析网站怎么做seo的目的是什么
  • jsp和php哪个做网站快网络软文
  • 用c 做网站设计系统的项目作业百度数字人内部运营心法曝光
  • 广东建设网站河南郑州最新消息今天
  • 兼职刷客在哪个网站做杭州网站seo优化
  • 抢车票网站怎么做如何制作一个自己的网页
  • 全国b2c网站建设网络推广优化网站
  • wordpress 固定连接插件短视频seo排名系统