Leetcode 1020 飞地的数量
地址 https://leetcode-cn.com/problems/number-of-enclaves/
给出一个二维数组 A,每个单元格为 0(代表海)或 1(代表陆地)。
移动是指在陆地上从一个地方走到另一个地方(朝四个方向之一)或离开网格的边界。
返回网格中无法在任意次数的移动中离开网格边界的陆地单元格的数量。
示例 : 输入:[[,,,],[,,,],[,,,],[,,,]]
输出:
解释:
有三个 被 包围。一个 没有被包围,因为它在边界上。
示例 : 输入:[[,,,],[,,,],[,,,],[,,,]]
输出:
解释:
所有 都在边界上或可以到达边界。
提示: <= A.length <=
<= A[i].length <=
<= A[i][j] <=
所有行的大小都相同
这题目和之前的
POJ 2386 Lake Counting
poj 1979 Red and Black
基本一致 可以使用并查集和DFS完成
这里就换个思路 给个BFS版本 不过提交 就tle了 仅仅是提供个答案外的思路
class Solution {
public:
int numEnclaves(vector<vector<int>>& A) {
if (A.empty()) return ;
int n = A.size();
int m = A[].size();
int ret = ;
for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
if (i == || i == ( n - ) || j == || j == (m - )) {
if(A[i][j] ==)
bfs(A, i, j);
}
}
}
for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
if (A[i][j] == ) {
ret++;
}
}
}
return ret;
}
private:
int bfs(vector<vector<int>>& A, int i, int j) {
int cnt = ;
queue<vector<int>> que;
que.push({ i, j });
int di[] = { , , , - };
int dj[] = { , -, , };
while (!que.empty()) {
vector<int> cur(que.front());
que.pop();
cnt++;
A[cur[]][cur[]] = ;
for (int k = ; k < ; k++) {
int ni = cur[] + di[k];
int nj = cur[] + dj[k];
if (valid(ni, nj, A.size(), A[].size()) && A[ni][nj] == ) {
que.push({ ni, nj });
}
}
}
return cnt;
}
bool valid(int i, int j, int n, int m) {
return (i >= && i < n && j >= && j < m);
}
};
ac code:
class Solution {
public:
int addx[]; int addy[];
void Dfs(vector<vector<int>>& A,int x ,int y)
{
if( x < || x>= A.size() || y < || y >= A[].size()) return;
A[x][y] = ;
for(int i = ;i <;i++){
int newx = x + addx[i];
int newy = y + addy[i];
if(newx>= && newx < A.size() && newy >= && newy< A[].size() && A[newx][newy] == )
Dfs(A,newx,newy);
}
}
int numEnclaves(vector<vector<int>>& A) {
if(A.empty() || A[].empty()) return ;
addx[] = -;addx[] = ; addx[] = ;addx[] = ;
addy[] = ;addy[] = ; addy[] = -;addy[] = ;
for(int i = ;i<A.size();++i){
for(int j = ; j< A[].size();++j){
if(i == || i == A.size()- || j == || j == A[].size()- ){
if(A[i][j] == ){
//边缘的元素 并且== 1
Dfs(A,i,j);
}
}
}
}
int count = ;
for(int i = ;i<A.size();++i){
for(int j = ; j< A[].size();++j){
if(A[i][j] == ) count++;
}
}
return count;
}
};

Leetcode 1020 飞地的数量的更多相关文章
- Leetcode之深度优先搜索(DFS)专题-1020. 飞地的数量(Number of Enclaves)
Leetcode之深度优先搜索(DFS)专题-1020. 飞地的数量(Number of Enclaves) 深度优先搜索的解题详细介绍,点击 给出一个二维数组 A,每个单元格为 0(代表海)或 1( ...
- Leetcode 200.岛屿的数量 - DFS、BFS
Leetcode 200 岛屿的数量: DFS利用函数调用栈保证了检索顺序, BFS则需要自己建立队列,把待检索对象按规则入队. class Solution { // DFS解法,8ms/10.7M ...
- [Swift]LeetCode1020. 飞地的数量 | Number of Enclaves
Given a 2D array A, each cell is 0 (representing sea) or 1 (representing land) A move consists of wa ...
- LeetCode 200:岛屿数量 Number of Islands
题目: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. Given ...
- Leetcode 1020. 将数组分成和相等的三个部分
1020. 将数组分成和相等的三个部分 显示英文描述 我的提交返回竞赛 用户通过次数321 用户尝试次数401 通过次数324 提交次数883 题目难度Easy 给定一个整数数组 A,只有我们可 ...
- Leetcode 452.用最少数量的箭引爆气球
用最少数量的箭引爆气球 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐 ...
- Leetcode 447.回旋镖的数量
回旋镖的数量 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找 ...
- Leetcode题目200.岛屿数量(BFS+DFS+并查集-中等)
题目描述: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 ...
- Java实现 LeetCode 726 原子的数量(递归+HashMap处理)
726. 原子的数量 给定一个化学式formula(作为字符串),返回每种原子的数量. 原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字. 如果数量大于 1,原子后会跟着数字表 ...
随机推荐
- JAVA基础知识注意事项
JAVA核心技术卷一 (第十版) 下面是需要注意的: 只有方法名和参数类型叫做方法的签名, 不同的返回类型值不能作为方法的签名.(4.6.1) 这是域与局部变量的主要不同点. 必须明确地初始化方法中的 ...
- linux(CentOS release 6.5)环境搭建svn
正文之前,说几句关于svn和git的闲话. 之前用的版本控制工具主要都是svn,随着时间的推移,git以其强大灵活的分支管理功能受到大众喜爱.尤其是多人同时开发时同一项目,且不同部分功能时,git的分 ...
- 关于css里大于号(>)的用法
之前用的css没涉及到这个问题,今天看到.知道大概用法,但不知道和普通的后代选择器有什么区别.到网上找了,其实w3c的css文档里有很详细明确的介绍(http://www.w3school.com.c ...
- 学习笔记42_SpringMVC
SpringMVC中,Global.axas发生变化,其中 1.原来是 public class MvcApplication:System.web.HttpApplication 现在是 publi ...
- [Jupyter Notebook]Notebook添加Ancona虚拟环境
1.首先安装ipykernel:conda install ipykernel 解决安装ipykernel权限报错问题 wangbin@Skyell_Cloud:~$ sudo chown -R wa ...
- MYSQL5.7修改密码强度策略
---恢复内容开始--- 在MySQL5.6.6之后,ORACLE更新了mysql密码强度必须要使用大小写数字符号来设置密码,但是有时候这样还是很不方便的.所以记录一篇如何修改mysql密码强度的博文 ...
- CSPS模拟 91
T1 sz最多根号种 T2 没计算内存,水过了..CSPS这样的话要爆零的qaq T3 感谢miku带我重学ST表%%%%%
- 20190630模拟赛B(单调队列优化dp)
.dp无疑了其实. 在考场上,我写了一个错解,但是数据小都能过,只是会爆空间,考场上想着怎么用滚动数组优化来着....把错解的方程列出来吧 ;i<=n;i++) { ;j<=k;j++) ...
- 最新JetBrains PyCharm 使用教程--常用快捷键和设置PyCharm为Eclipse快捷键(四)
PyCharm常用快捷键使用 Ctrl + D:复制当前行 Ctrl + Y:删除当前行 Ctrl + Z 撤销 Shift + Enter:快速换行 Ctrl + /:快速注释 Ctrl + F: ...
- linux中jdk的安装
//先检查jdk有没有安装 java -version cp jdk-7u79-linux-x64.tar.gz /usr/local/ cd /usr/local/ tar -zxvf jdk- ...