题解 | 岛屿数量

alt

题干分析:

题目给予我们一个只由数字0和1组成的二维数组,要求我们返回这个二维数组在逻辑上有多少块相邻的1

算法思路:

经典的BFS例题,直接遍历所有节点,只要遇到1就增加计数并开始BFS巡岛将所有相邻的1消灭,遍历完成后返回计数结果即可。

实现代码:

int numIslands(vector<vector<char>>& grid) {
        int ans = 0;
        for (int i = 0; i < grid.size(); i++) {
            for (int j = 0; j < grid[0].size(); j++) {
                if (grid[i][j] == '1') { // 找到陆地,开始巡岛
                    ans++;
                    queue<pair<int, int> > q; // 待处理
                    q.emplace(i, j); // 启动
                    grid[i][j] = '0';
                  	// BFS
                    while (!q.empty()) {
                        auto [x, y] = q.front();
                        q.pop();
                        if (x > 0 && grid[x - 1][y] == '1') {
                            q.emplace(x - 1, y);
                            grid[x - 1][y] = '0';
                        }
                        if (x < grid.size() - 1 && grid[x + 1][y] == '1') {
                            q.emplace(x + 1, y);
                            grid[x + 1][y] = '0';
                        }
                        if (y > 0 && grid[x][y - 1] == '1') {
                            q.emplace(x, y - 1);
                            grid[x][y - 1] = '0';
                        }
                        if (y < grid[0].size() - 1 && grid[x][y + 1] == '1') {
                            q.emplace(x, y + 1);
                            grid[x][y + 1] = '0';
                        }
                    }
                }
            }
        }
        return ans;
    }

复杂度分析:

  • 时间复杂度:每个数组元素最多被访问常数次,总计时间复杂度为O(nm)。
  • 空间复杂度:暂存队列最多维护2min(n,m)个元素,空间复杂度大致为O(min(n,m))
全部评论
加油哦!!!保持良好习惯
点赞 回复 分享
发布于 昨天 21:45 广东

相关推荐

不愿透露姓名的神秘牛友
12-05 08:42
百度 算法 35✖️16薪 博士985
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务