200 Number of Islands——leetcode

本文深入探讨图像填充技术的核心概念、算法复杂度与空间复杂度,并通过代码实例展示实现过程,适合对图像处理感兴趣的开发者深入学习。
部署运行你感兴趣的模型镜像

这个是图像中的填充技术,即选择一个种子,然后对其周边联通的的依次填充。

代码未必最快,但很容易理解。

算法复杂度O(M*N)

空间复杂度O(M*N),最坏情况。

算法说明:

<1>初始化 访问标记

<2>对每一个没有访问的cell,进行填充算法

 

填充算法:(使用栈)

<1>设置初始种子,入栈

<2>如果栈空,结束

<3>出栈

依次对周围连通的cell,且没有被填充过,入栈

转2。

 

class Solution {
public:
    int numIslands(vector<vector<char>> &grid) 
    {
        if(grid.empty()||grid[0].empty()){
            return 0;            
        }
        int scc=0;
        const int M=grid.size();
        const int N=grid[0].size();
        vector<vector<int> > visited(M);
        for(int i=0;i<M;i++)
        {
            visited[i].resize(N);
        }
        vector<pair<int,int> > s;
        for(int i=0;i<M;i++)
        {
            for(int j=0;j<N;j++)
            {
                if(!visited[i][j] && grid[i][j]=='1')
                {
                    s.clear();
                    visited[i][j]=1;
                    s.push_back(pair<int,int>(i,j));
                    while(!s.empty())
                    {
                        pair<int,int> pr = s.back();
                        s.pop_back();

                        int x = pr.first;
                        int y = pr.second;

                        x=pr.first-1;
                        if(x>=0&&grid[x][y]=='1' && !visited[x][y])
                        {
                            visited[x][y]=1;
                            s.push_back(pair<int,int>(x,y));

                        }
                        x=pr.first+1;
                        if(x<M&&grid[x][y]=='1' && !visited[x][y])
                        {
                            visited[x][y]=1;
                            s.push_back(pair<int,int>(x,y));
                        }
                        x=pr.first;
                        y=pr.second-1;
                        if(y>=0&&grid[x][y]=='1' && !visited[x][y])
                        {
                            visited[x][y]=1;
                            s.push_back(pair<int,int>(x,y));
                        }
                        y=pr.second+1;
                        if(y<N&&grid[x][y]=='1' && !visited[x][y])
                        {
                            visited[x][y]=1;
                            s.push_back(pair<int,int>(x,y));
                        }
                    }
                    ++scc;
                }
            }
        }
        return scc;
    }
};

 

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值