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

代码随想录三刷day51

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、力扣200. 岛屿数量
  • 二、力扣695. 岛屿的最大面积
  • 三、力扣1020. 飞地的数量
  • 四、力扣130. 被围绕的区域


前言


依然是从地图周边出发,将周边空格相邻的'O'都做上标记,然后在遍历一遍地图,遇到 'O' 且没做过标记的,那么都是地图中间的'O',全部改成'X'就行。

一、力扣200. 岛屿数量

class Solution {int[][] arr = new int[][]{{0,1},{0,-1},{-1,0},{1,0}};boolean[][] flag;public int numIslands(char[][] grid) {int m = grid.length, n = grid[0].length;int res = 0;flag = new boolean[m][n];for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(!flag[i][j] && grid[i][j] == '1'){res ++;bfs(grid, i, j);}}}return res;}public void bfs(char[][] grid, int x, int y){Deque<int[]> deq = new LinkedList<>();deq.offerLast(new int[]{x,y});while(!deq.isEmpty()){int size = deq.size();for(int i = 0; i < size; i ++){int[] cur = deq.pollFirst();for(int j = 0; j < 4; j ++){int curX = cur[0] + arr[j][0];int curY = cur[1] + arr[j][1];if(curX < 0 || curX >= grid.length || curY < 0 || curY >= grid[0].length){continue;}if(!flag[curX][curY] && grid[curX][curY] == '1'){flag[curX][curY] = true;deq.offerLast(new int[]{curX,curY});}}}}}
}

二、力扣695. 岛屿的最大面积

class Solution {int res = 0;int count = 0;int[][] arr = new int[][]{{0,1},{0,-1},{-1,0},{1,0}};boolean[][] flag;public int maxAreaOfIsland(int[][] grid) {int m = grid.length, n = grid[0].length;flag = new boolean[m][n];for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(!flag[i][j] && grid[i][j] == 1){flag[i][j] = true;count = 1;dfs(grid,i,j);}}}return res;}public void dfs(int[][] grid, int x, int y){res = Math.max(count,res);for(int i = 0; i < 4; i ++){int curX = x + arr[i][0];int curY = y + arr[i][1];if(curX < 0 || curX >= grid.length || curY < 0 || curY >= grid[0].length){continue;}if(!flag[curX][curY] && grid[curX][curY] == 1){flag[curX][curY] = true;count ++;dfs(grid,curX,curY);}}}
}

三、力扣1020. 飞地的数量

class Solution {int res = 0;int count = 0;int[][] arr = new int[][]{{0,1},{0,-1},{-1,0},{1,0}};boolean[][] flag;boolean f;public int numEnclaves(int[][] grid) {int m = grid.length, n = grid[0].length;flag = new boolean[m][n];for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(!flag[i][j] && grid[i][j] == 1){flag[i][j] = true;count = 1;f = false;dfs(grid,i,j);if(!f){res += count;}}}}return res;}public void dfs(int[][] grid, int x, int y){for(int i = 0; i < 4; i ++){int curX = x + arr[i][0];int curY = y + arr[i][1];if(curX < 0 || curX >= grid.length || curY < 0 || curY >= grid[0].length){f = true;continue;}if(!flag[curX][curY] && grid[curX][curY] == 1){count ++;flag[curX][curY] = true;dfs(grid,curX,curY);}}}
}

四、力扣130. 被围绕的区域

class Solution {int[][] arr = new int[][]{{0,1},{0,-1},{-1,0},{1,0}};boolean[][] flag;public void solve(char[][] board) {int m = board.length, n = board[0].length;flag = new boolean[m][n];for(int i = 0; i < m; i ++){if(!flag[i][0] && board[i][0] == 'O'){flag[i][0] = true;dfs(board, i, 0);}if(!flag[i][n-1] && board[i][n-1] == 'O'){flag[i][n-1] = true;dfs(board,i,n-1);}}for(int i = 0; i < n; i ++){if(!flag[0][i] && board[0][i] == 'O'){flag[0][i] = true;dfs(board,0,i);}if(!flag[m-1][i] && board[m-1][i] == 'O'){flag[m-1][i] = true;dfs(board,m-1,i);}}for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(!flag[i][j] && board[i][j] == 'O'){board[i][j] = 'X';}}}}public void dfs(char[][] board, int x, int y){for(int i = 0; i < 4; i++){int curX = x + arr[i][0];int curY = y + arr[i][1];if(curX < 0 || curX >= board.length || curY < 0 || curY >= board[0].length){continue;}if(!flag[curX][curY] && board[curX][curY] == 'O'){flag[curX][curY] = true;dfs(board,curX,curY);}}}
}
http://www.lryc.cn/news/349459.html

相关文章:

  • 基于python+Django的二维码生成算法设计与实现
  • pytorch 2.0 多线程并行,导致GPU利用100%,卡住
  • 后端开发面经系列 -- 阿里C++二面面经
  • 【Image captioning】In Defense of Grid Features for Visual Question Answering实现流程
  • MySQL用SQL取三列中最大的数据值
  • 【Mac】如何解决打开PD虚拟机后Mac无法上网的问题?
  • 【NodeMCU实时天气时钟温湿度项目 7】和风天气API返回JSON数据信息的解压缩实现——ArduinoUZlib功能库
  • leetcode题目9
  • CNAME记录
  • pytest + yaml 框架 -69.新增depend 关键字,导入其它yaml用例
  • 【网络】tcp的初始化序列号为什么要随机生成
  • 【SRC实战】利用APP前端加密构造数据包
  • ThreadLocal描述
  • Linux-基础命令第三天
  • Windows Server 2022 环境下WEB和DNS服务器配置方法
  • 静态住宅代理 IP 的影响
  • IP代理中的SOCKS5代理是什么?安全吗?
  • 一个用Kotlin编写简易的串行任务调度器
  • JavaScript异步编程——11-异常处理方案【万字长文,感谢支持】
  • python如何做一个服务器fastapi 和flask
  • Element-ui el-table组件单选/多选/跨页勾选讲解
  • CentOS 安装 SeaweedFS
  • Redis如何避免数据丢失?——AOF
  • xFormers
  • LQ杯当时的WP
  • 数据结构与算法学习笔记三---栈和队列
  • web入门——导航栏
  • 基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
  • Flutter 中的 ListTile 小部件:全面指南
  • Kubernetes——CNI网络组件