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

相关推荐
田梓燊4 小时前
力扣:23.合并 K 个升序链表
算法·leetcode·链表
re林檎4 小时前
算法札记——4.27
算法
数据牧羊人的成长笔记5 小时前
逻辑回归与Softmax回归
算法·回归·逻辑回归
郑州光合科技余经理5 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
d111111111d8 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
Jiangxl~10 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢10 小时前
wolfram详解山峦算法
前端·算法
counting money10 小时前
prim算法最小生成树(java)
算法
澈20710 小时前
C++面向对象:类与对象核心解析
c++·算法
用户6906738819210 小时前
基于无人机的单目测距系统,平均误差仅2.12%
算法