力扣中695 岛屿的最大面积

 

 

class Solution {
    public int maxAreaOfIsland(int[][] grid) {
        int count=0;  //岛屿大小
        int tempcount=0;
        
        int[] dx= {0,0,1,-1};//递归 也用2个1*4  [2*5]
        int[] dy= {1,-1,0,0};
        
        int lenx=grid[0].length; //5
        int leny=grid.length;
        int[][] flag=new int[leny][lenx];//自动初始化全0 标记没有是否遍历
        Queue<int[]> queue=new LinkedList<int[]>();
        
        //想从1到最后1遍历 发现会有重复的欸 先不管重复了
        for(int i=0;i<leny;i++) {
            for(int j=0;j<lenx;j++) {
                if(flag[i][j]==1) {
                    continue;
                }
                if((flag[i][j]==0)&&(grid[i][j]==1)) {//没遍历过且是岛屿
                    queue.offer(new int[]{i,j});
                    flag[i][j]=1;
                    tempcount++;
                }
                while(!queue.isEmpty()) {
                    int[] temp= queue.poll();//取出元素
                    for(int k=0;k<4;k++) {
                        int x=temp[0]+dx[k];
                        int y=temp[1]+dy[k];//其实都可以不加上左的了 不行 可能是凹形的
                        if((x>=0)&&(x<leny)&&(y>=0)&&(y<lenx)) {
                            if((flag[x][y]==0)&&(grid[x][y]==1)){
                                queue.offer(new int[]{x,y});
                                flag[x][y]=1;
                                tempcount++;
                            }
                        }
                    }    
                }
                count=Math.max(count, tempcount);
                tempcount=0;
            }
        }
        
        
        return count;
    }
}

 

posted @ 2023-03-03 16:32  Ssshiny  阅读(18)  评论(0)    收藏  举报