• 代码随想录图论部分-695. 岛屿的最大面积|1020. 飞地的数量


    695. 岛屿的最大面积

    题目:给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。
    在这里插入图片描述

    计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0
    题目链接695. 岛屿的最大面积
    和岛屿数量很像 这里比较一个最值就行

    class Solution {
        public int[][] move={{0,1},{0,-1},{1,0},{-1,0}};
        public boolean[][] visited;
        public int maxAreaOfIsland(int[][] grid) {
            int max=0;
            visited=new boolean[grid.length][grid[0].length];
            for(int i=0;i<grid.length;i++){
                for(int j=0;j<grid[0].length;j++){
                    if(!visited[i][j]&&grid[i][j]==1){
                        max=Math.max(max,bfs(grid,i,j));  
                    }
                }
            }
            return max;  
        }
        public int bfs(int[][] grid,int x,int y){
            int num=1;
            Queue<int[]> queue=new LinkedList<>();
            queue.offer(new int[]{x,y});
            visited[x][y]=true;
            while(!queue.isEmpty()){
                int[] node=queue.poll();
                for(int p=0;p<4;p++){
                int nextx=node[0]+move[p][0];
                int nexty=node[1]+move[p][1];
                if(nextx<0||nextx>=grid.length||nexty<0||nexty>=grid[0].length){
                    continue;
                }
                if(!visited[nextx][nexty]&&grid[nextx][nexty]==1){
                    queue.offer(new int[]{nextx,nexty});
                    visited[nextx][nexty]=true;
                    num++;
                }
                }
            }
            return num;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    1020. 飞地的数量

    题目:给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。一次移动是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。返回网格中无法在任意次数的移动中离开网格边界的陆地单元格的数量。
    在这里插入图片描述

    题目链接: [1020. 飞地的数量](https://leetcode.cn/problems/number-of-enclaves/description/)
    遇到边界则记录 不能遇到边界就退出 需要找到所有联通的点进行标记

    class Solution {
        public int[][] move={{0,1},{0,-1},{1,0},{-1,0}};
        public boolean[][] visited;
        public boolean flag;
        public int numEnclaves(int[][] grid) {
            int nums=0;
            visited=new boolean[grid.length][grid[0].length];
            for(int i=0;i<grid.length;i++){
                for(int j=0;j<grid[0].length;j++){
                    if(!visited[i][j]&&grid[i][j]==1){
                        flag=false;
                        int num=bfs(grid,i,j);
                        if(flag==false){
                            nums+=num;
                        }                          
                    }
                }
            }
            return nums;  
        }
        public int bfs(int[][] grid,int x,int y){
            if(x==0||x==grid.length-1||y==0||y==grid[0].length-1){
                flag=true;
            }
            int num=1;
            Queue<int[]> queue=new LinkedList<>();
            queue.offer(new int[]{x,y});
            visited[x][y]=true;
            while(!queue.isEmpty()){
                int[] node=queue.poll();
                for(int p=0;p<4;p++){
                int nextx=node[0]+move[p][0];
                int nexty=node[1]+move[p][1];
                if(nextx<0||nextx>=grid.length||nexty<0||nexty>=grid[0].length){
                    continue;
                }
                if(!visited[nextx][nexty]&&grid[nextx][nexty]==1){
                    if(nextx==0||nextx==grid.length-1||nexty==0||nexty==grid[0].length-1)       {
                        flag=true;
                    }
                    queue.offer(new int[]{nextx,nexty});
                    visited[nextx][nexty]=true;
                    num++;
                }
                }
            }
            return num;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
  • 相关阅读:
    VS 2015社区版下载链接
    【VMware vSphere】使用RVTools中的PowerShell脚本创建导出vSphere环境信息的自动化任务。
    Shell脚本
    CentOS搭建邮件服务器:DNS配置方法技巧?
    C++实现四叉树索引
    Python + requests实现接口自动化框架!
    ApplicationContext和ServletContext
    缓存优化必备:掌握冷热分离和重排序的优化技巧
    01 计算机图形学概述
    matplotlib库学习之绘图透明度设置(精炼准确)
  • 原文地址:https://blog.csdn.net/weixin_44925329/article/details/134344089