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

相关推荐
无限码力2 小时前
8.26华为OD机试真题 新系统【字符串回文判断】
算法·华为od·华为od机考·华为od机试·华为od上机考试真题·华为od最新机试真题题解·华为od机试真题题库
玖玥拾4 小时前
LeetCode 125 验证回文串
算法·leetcode
Asize10 小时前
146. LRU 缓存
算法
Asize10 小时前
543. 二叉树的直径
算法
lemon_sjdk10 小时前
ObjectProperty
java·开发语言·算法
Zentceh11 小时前
AI-ISP在夜视机芯中的应用:从传统ISP到PixelClean全彩夜视的进化
人工智能·科技·算法·计算机视觉·车载系统·视频·智能硬件
xier_ran11 小时前
【infra之路】AWQ 详解:激活感知权重保护,让 W4A16 量化精度超越 GPTQ
线性代数·算法·机器学习·量化·infra
亦皓ai12 小时前
AI时代后端工程(二):AI把代码写得越来越快,我却越来越不敢让它直接开工了
人工智能·算法·机器学习·搜索引擎·transformer
玖玥拾13 小时前
LeetCode 392 判断子序列
笔记·算法·leetcode
重生之后端学习14 小时前
239. 滑动窗口最大值[困难]✅
java·数据结构·算法·leetcode·职场和发展