827. 最大人工岛

cpp 复制代码
class Solution {
public:
    void dfs(vector<vector<int>> &grid,int x,int y,int hang,int lie,int mark,int &size){
        if(grid[x][y]==1){
            grid[x][y]=mark;
            size++;
            if(x-1>=0){
                dfs(grid,x-1,y,hang,lie,mark,size);
            }
            if(x+1<hang){
                dfs(grid,x+1,y,hang,lie,mark,size);
            }
            if(y-1>=0){
                dfs(grid,x,y-1,hang,lie,mark,size);
            }
            if(y+1<lie){
                dfs(grid,x,y+1,hang,lie,mark,size);
            }
        }
    }
    int largestIsland(vector<vector<int>>& grid) {
        int hang=grid.size();
        int lie=grid[0].size();
        int mark=2;
        int res=0;
        unordered_map<int,int> mp;
        for(int i=0;i<hang;i++){
            for(int j=0;j<lie;j++){
                if(grid[i][j]==1){
                    int size=0;
                    dfs(grid,i,j,hang,lie,mark,size);
                    mp[mark]=size;
                    res=max(res,size);
                    mark++;
                }
            }
        }
        for(int i=0;i<hang;i++){
            for(int j=0;j<lie;j++){
                if(grid[i][j]==0){
                    unordered_set<int> land;
                    int sum=1;
                    if(i-1>=0&&grid[i-1][j]!=0){
                        land.insert(grid[i-1][j]);
                    }
                    if(i+1<hang&&grid[i+1][j]!=0){
                        land.insert(grid[i+1][j]);
                    }
                    if(j-1>=0&&grid[i][j-1]!=0){
                        land.insert(grid[i][j-1]);
                    }
                    if(j+1<lie&&grid[i][j+1]!=0){
                        land.insert(grid[i][j+1]);
                    }
                    for(auto a:land){
                        sum+=mp[a];
                    }
                    res=max(res,sum);
                }
            }
        }
        return res;
    }
};

先标记各个岛,然后将岛屿与其面积存入map中,然后遍历0,查找在一位变0下的面积最大值

相关推荐
吴佳浩1 小时前
大模型垂直领域微调系列(二):ms-swift 框架全景
算法
DeepModel1 小时前
【概率分布】泊松分布的原理、推导与实战应用
python·算法·概率论
ambition202421 小时前
蓝桥杯“水质检测“问题:0-1 BFS算法的完整解析
c语言·数据结构·c++·算法·蓝桥杯·宽度优先
皙然1 小时前
深入解析 Java 中的 final 关键字
java·开发语言·算法
式5162 小时前
CUDA编程学习(四)内存拷贝
学习·算法
Barkamin2 小时前
直接插入排序的简单实现
java·算法·排序算法
Frostnova丶2 小时前
LeetCode 1622. 奇妙序列
算法·leetcode
自在极意功。2 小时前
ArrayList扩容机制
java·开发语言·算法·集合·arraylist
计算机安禾2 小时前
【C语言程序设计】第26篇:变量的作用域与生命周期
c语言·开发语言·数据结构·算法·leetcode·visual studio code·visual studio