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;
}
};