695. Max Area of Island 島嶼的最大面積


Given a non-empty 2D array  grid   of 0's and 1's, an   island   is a group of   1 's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.

Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.)

Example 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]]
Given the above grid, return  6 . Note the answer is not 11, because the island must be connected 4-directionally.

Example 2:

[[0,0,0,0,0,0,0,0]]
Given the above grid, return  0 .

Note: The length of each dimension in the given grid does not exceed 50

給定一個非空的二維陣列網格為0和1,一個島是一組1(代表陸地)四方向(水平或垂直)。您可以假設網格的所有四個邊緣被水包圍。 在給定的2D數組中找到一個島的最大面積。 (如果沒有島,最大面積為0.)

解法:用廣度優先法遍歷值為1的坐標,用set保存已遍歷過的坐標

   
   
   
           
  1. var maxAreaOfIsland = function (grid) {
  2. let max = 0;
  3. let posSet = new Set();
  4. for (let r = 0; r < grid.length; r++) {
  5. let row = grid[r];
  6. for (let c = 0; c < row.length; c++) {
  7. if (row[c] === 0 || posSet.has(getPosStr(r, c))) continue;
  8. let block = 0;
  9. let queue = [{ r, c }];
  10. posSet.add(getPosStr(r, c));
  11. while (queue.length > 0) {
  12. block++;
  13. let pos = queue.shift();
  14. let posRow = pos.r;
  15. let posCol = pos.c;
  16. if (posRow >= 1 && grid[posRow - 1][posCol] == 1 && !posSet.has(getPosStr(posRow - 1, posCol))) {
  17. queue.push({ r: posRow - 1, c: posCol });
  18. posSet.add(getPosStr(posRow - 1, posCol));
  19. }
  20. if (posRow < grid.length - 1 && grid[posRow + 1][posCol] == 1 && !posSet.has(getPosStr(posRow + 1, posCol))) {
  21. queue.push({ r: posRow + 1, c: posCol });
  22. posSet.add(getPosStr(posRow + 1, posCol));
  23. }
  24. if (posCol >= 1 && grid[posRow][posCol - 1] == 1 && !posSet.has(getPosStr(posRow, posCol - 1))) {
  25. queue.push({ r: posRow, c: posCol - 1 });
  26. posSet.add(getPosStr(posRow, posCol - 1));
  27. }
  28. if (posCol < row.length - 1 && grid[posRow][posCol + 1] == 1 && !posSet.has(getPosStr(posRow, posCol + 1))) {
  29. queue.push({ r: posRow, c: posCol + 1 });
  30. posSet.add(getPosStr(posRow, posCol + 1));
  31. }
  32. }
  33. max = Math.max(max, block);
  34. }
  35. }
  36. return max;
  37. };
  38. let getPosStr = (x, y) => {
  39. return x + "," + y;
  40. }







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM