Flood Fill 图染色


题目描述
现在有一个仅包含‘X’和‘O’的二维板,请捕获所有的被‘X’包围的区域
捕获一个被包围区域的方法是将被包围区域中的所有‘O’变成‘X’
例如
X X X X
X O O X
X X O X
O X X X
执行完你给出的函数以后,这个二维板应该变成:
X X X X
X X X X
X X X X
O X X X






#define dfs solve
typedef vector> g;
int dx[] = {0,0,-1,1},dy[] = {-1,1,0,0};
class Solution {
public:
    void solve(vector> &board) {
        int n = board.size();
        if(n<1) return;
        int m=board[0].size();
         
        for(int i=0;i=board.size()||b>=board[0].size()||board[a][b]=='X') return;
        board[a][b] = p;
        for(int i=0;i<4;++i) {
            int x = a+dx[i],y = b+dy[i];
            if(x<0||y<0||x>=board.size()||y>=board[0].size()||board[x][y]=='X'||board[x][y]=='*') continue;
            solve(board,x,y,p);
        }
    }
    
    
    
};

最大连续序列的长度

题目描述
给定一个无序的整数类型数组,求最长的连续元素序列的长度。
例如:
给出的数组为[1000, 4, 2000, 1, 3, 2],
最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4
你需要给出时间复杂度在O(n)之内的算法
示例1
输入
复制
[1000, 4, 2000, 1, 3, 2]
返回值
复制
4

这个题可以看成是遍历一维的图



class Solution {
public:
    /**
     * 
     * @param num int整型vector 
     * @return int整型
     */
    int longestConsecutive(vector& num) {
        if(num.size()<=1) return num.size();
        // write code here
        unordered_set_map(num.begin(),num.end());
        
        int malen=1;
        for(int x: num) {
            int r=x,l=x;
            _map.erase(x);
            while(_map.count(l-1)) _map.erase(l-1),l--;
            while(_map.count(r+1)) _map.erase(r+1),r++;
            malen = max(malen,r-l+1);
        }
       
        return malen;
    }
};

相关