岛屿的最大面积
1、題目描述
給定一個包含了一些 0 和 1的非空二維數組 grid , 一個 島嶼 是由四個方向 (水平或垂直) 的 1 (代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。
找到給定的二維數組中最大的島嶼面積。(如果沒有島嶼,則返回面積為0。)
示例 1:
[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]] 對于上面這個給定矩陣應返回 6。注意答案不應該是11,因為島嶼只能包含水平或垂直的四個方向的‘1’。示例 2:
[[0,0,0,0,0,0,0,0]] 對于上面這個給定的矩陣, 返回 0。注意: 給定的矩陣grid 的長度和寬度都不超過 50。
2、解法
2.1 DFS(深度優先遍歷)
int m ;int n ;int[][] around = {{0,1},{1,0},{0,-1},{-1,0}};public int maxAreaOfIsland(int[][] grid) {m = grid.length;n = grid[0].length;int maxArea=0;for(int i=0;i<m;i++) {for(int j=0;j<n;j++) {maxArea = Math.max(maxArea, dfs(grid, i,j));}}return maxArea;}/*** 深度遍歷,計算某點的周圍為1的節點的數量* @param grid* @param i* @param j* @return*/private int dfs(int[][]grid, int i, int j) {if(i<0|| i>=m || j<0||j>=n || grid[i][j] ==0) {return 0;}int area =1;grid[i][j]=0;for(int[] arr:around) {area +=dfs(grid, i+arr[0], j+arr[1]);}return area;}總結
- 上一篇: 桂圆枸杞红枣山楂泡水喝的功效与作用、禁忌
- 下一篇: 搜索旋转排序数组