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下的面积最大值

相关推荐
hetao173383710 分钟前
2025-03-24~04-06 hetao1733837 的刷题记录
c++·算法
_深海凉_13 分钟前
LeetCode热题100-环形链表
算法·leetcode·链表
原来是猿14 分钟前
Linux进程信号详解(三):信号保存
开发语言·c++·算法
2401_8920709824 分钟前
算法与数据结构精讲:最大子段和(暴力 / 优化 / 分治)+ 线段树从入门到实战
c++·算法·线段树·最大子段和
memcpy026 分钟前
LeetCode 904. 水果成篮【不定长滑窗+哈希表】1516
算法·leetcode·散列表
老四啊laosi36 分钟前
[双指针] 8. 四数之和
算法·leetcode·四数之和
汀、人工智能36 分钟前
[特殊字符] 第24课:反转链表
数据结构·算法·链表·数据库架构··反转链表
田梓燊42 分钟前
leetcode 41
数据结构·算法·leetcode
_深海凉_1 小时前
LeetCode热题100-三数之和
算法·leetcode·职场和发展
y = xⁿ1 小时前
【LeetCode】双指针合集
算法·leetcode