1. 程式人生 > 其它 >695. 島嶼的最大面積

695. 島嶼的最大面積

給你一個大小為 m x n 的二進位制矩陣 grid 。

島嶼是由一些相鄰的1(代表土地) 構成的組合,這裡的「相鄰」要求兩個 1 必須在 水平或者豎直的四個方向上 相鄰。你可以假設grid 的四個邊緣都被 0(代表水)包圍著。

島嶼的面積是島上值為 1 的單元格的數目。

計算並返回 grid 中最大的島嶼面積。如果沒有島嶼,則返回面積為 0 。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/max-area-of-island
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

import java.util.LinkedList;

class Solution {

    private int[] dx = {0, 1, 0, -1};

    private int[] dy = {1, 0, -1, 0};

    public int maxAreaOfIsland(int[][] grid) {
        if (grid == null || grid.length == 0 || grid[0].length == 0) {
            return 0;
        }

        int ret = 0;

        for (int i = 0; i < grid.length; ++i) {
            for (int j = 0; j < grid[i].length; ++j) {
                if (grid[i][j] == 1) {
                    int count = 0;
                    LinkedList<int[]> queue = new LinkedList<>();
                    grid[i][j] = 0;
                    queue.offer(new int[]{i, j});
                    while (!queue.isEmpty()) {
                        int[] point = queue.poll();
                        count++;
                        for (int k = 0; k < 4; ++k) {
                            int x = dx[k] + point[0];
                            int y = dy[k] + point[1];
                            if (x >= 0 && x < grid.length && y >= 0 && y < grid[0].length && grid[x][y] == 1) {
                                grid[x][y] = 0;
                                queue.offer(new int[]{x, y});
                            }
                        }
                    }
                    ret = Math.max(ret, count);
                }
            }
        }

        return ret;
    }
}
心之所向,素履以往 生如逆旅,一葦以航