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; } }
标签:695,int,岛屿,力扣,grid,&&,new,leny From: https://www.cnblogs.com/ayuanjiejie/p/17176170.html