题解 57| 城里的人想逃,外面的人想进#被围绕的区域#

被围绕的区域

https://www.nowcoder.com/practice/3946670643fe4ec2aedcc2be45aed1a9

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param board char字符型vector<vector<>> 
     * @return char字符型vector<vector<>>
     */
    void dfs(vector<vector<char>> &board,int x,int y){
        if (x < 0 || x >= board.size() ||
            y < 0 || y >= board[0].size()) 
        {
            return;//出界了
        }

        if (board[x][y] == 'O') {
            board[x][y] = 'B';

            dfs(board, x-1, y);
            dfs(board, x+1, y);
            dfs(board, x, y+1);
            dfs(board, x, y-1);
        }
    }
    vector<vector<char> > surroundedArea(vector<vector<char> >& board) {
        // write code here
        if(board.empty()) return board;
        int b = board.size();

        //上下y深度扫描
        for (int i = 0; i < b; ++i) {
            dfs(board, 0, i);
            dfs(board, board.size()-1, i);
        }

        //左右x深度扫描
        for (int i = 0; i < b; ++i) {
            dfs(board, i, 0);
            dfs(board, i, board.size()-1);
        }
        
        for (int i = 0; i < b; ++i) {
            for (int j = 0; j < b; ++j) {
                if(board[i][j] == 'O'){
                    board[i][j] = 'X';
                }
                if(board[i][j] == 'B'){
                    board[i][j] = 'O';//还原
                }

            }
        }

        return board;
    }
};

基本算法思想

使用深度优先搜索(DFS)来遍历与边界上的 'O' 相连的所有 'O',将其标记为 'B'。然后再遍历整个矩阵,将 'O' 替换为 'X',将 'B' 替换为 'O'。

时间复杂度

假设矩阵的大小为 m x n,遍历矩阵的时间复杂度为 O(mn),DFS的时间复杂度为 O(mn)。所以总的时间复杂度为 O(mn)。

空间复杂度

使用了递归调用的DFS算法,所以空间复杂度为递归调用栈的深度,最坏情况下为 O(mn)。

2024考研数据结构 文章被收录于专栏

本人考研刷算法题,立此专栏练习强化。

全部评论

相关推荐

03-02 08:18
集美大学 Java
钱嘛数字而已:没有赛事奖项么?另外,项目经历字有点多哈,建议突出一下重点:用的什么技术,解决什么问题,达到什么效果。
大家都开始春招面试了吗
点赞 评论 收藏
分享
书海为家:实习是成为大厂正式员工很好的敲门砖,看您的简历中有一段实习经历,挺好的。我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己实习时做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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