描述
给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。
返回执行此操作后,grid 中最大的岛屿面积是多少?
岛屿 由一组上、下、左、右四个方向相连的 1 形成。
示例 1:
输入: grid = [[1, 0], [0, 1]]
输出: 3
解释: 将一格0变成1,最终连通两个小岛得到面积为 3 的岛屿。
示例 2:
输入: grid = [[1, 1], [1, 0]]
输出: 4
解释: 将一格0变成1,岛屿的面积扩大为 4。
示例 3:
输入: grid = [[1, 1], [1, 1]]
输出: 4
解释: 没有0可以让我们变成1,面积依然为 4。
提示:
n == grid.length
n == grid[i].length
1 <= n <= 500
grid[i][j] 为 0 或 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/making-a-large-island
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析
DFS遍历岛屿,用特殊的符号标记岛屿并把符号与岛屿的面积作为键值对存储起来。
再次遍历是0的情况,把0周围四个相邻节点的岛屿的面积加起来就是反转这个0为1的最大面积和,考虑所有的0,记录最大的面积。
class Solution {
public int largestIsland(int[][] grid) {
Map<Integer,Integer> map = new HashMap<>();
int sign = 2;
int ans = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0]