Sakura

sakura

博客园 首页 新随笔 联系 订阅 管理

题目描述
现在有一个仅包含‘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<vector<char>> g;
int dx[] = {0,0,-1,1},dy[] = {-1,1,0,0};
class Solution {
public:
    void solve(vector<vector<char>> &board) {
        int n = board.size();
        if(n<1) return;
        int m=board[0].size();
         
        for(int i=0;i<n;++i) {
            dfs(board,i,0,'*');
            dfs(board,i,m-1,'*');
        }
        for(int i=0;i<m;++i) {
            dfs(board,0,i,'*');
            dfs(board,n-1,i,'*');
        }
       
         
        for(int i=0;i<n;++i) {
            for(int j=0;j<m;++j) {
                if(board[i][j]=='O') {
                    board[i][j] = 'X';
                }else if(board[i][j]=='*') board[i][j] = 'O';
            }
        }
        
    }
        
    void solve(g& board,int a,int b,char p) {
        if(a<0||b<0||a>=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<int>& num) {
        if(num.size()<=1) return num.size();
        // write code here
        unordered_set<int>_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;
    }
};

posted on 2021-01-25 13:39  .geek  阅读(70)  评论(0编辑  收藏  举报