随手练——LintCode 433 - 小岛数量
LintCode 433: https://www.lintcode.com/problem/number-of-islands/description
LintCode 434: https://www.lintcode.com/problem/number-of-islands-ii/description(问法变了一下,思想还是一样的。)

解题思想:“感染“,从头开始遍历,碰到1,res++,开始感染,把所有相邻的1全部变成0,遍历完成,res就是结果。
题目是在B站上看到的一个老师的讲解:https://www.bilibili.com/video/av42241070/?p=8,不知道视频能存活多久。不过老师讲的是感染成 2,感染成 0
,也是一样的。
这题要注意的就是测试数据里有一个空数据,一定要处理,网站给看哪个样例不过,如果是看不到测试数据的,又该自闭了。
class Solution {
public:
/**
* @param grid: a boolean 2D matrix
* @return: an integer
*/
void infect(vector<vector<bool>> &a,int i,int j,int N,int M) {
if (i < || i >= N || j < || j >= M||a[i][j]!=) {
return;
}
a[i][j] = ;
infect(a, i + , j, N, M);
infect(a, i - , j, N, M);
infect(a, i, j + , N, M);
infect(a, i, j - , N, M);
}
int numIslands(vector<vector<bool>> &grid) {
// write your code here
if(grid.empty())
return ;
int N = grid.size();
int M = grid[].size();
int res = ;
for (int i = ; i < N; i++) {
for (int j = ; j < M; j++) {
if (grid[i][j] == ) {
infect(grid, i, j, N, M);
res++;
}
}
}
//cout << res << endl;
return res;
}
};
问题还有个升级:
将海域一切为二,分开求,但是最终还是要给出整片海域的岛屿数量。
就是比如:左边求出来是1个,右边求出来是2个,但其实还是一个岛屿。

牵扯到并查集(数据结构——并查集(2019-02-05 17:00)),每个点,在被感染的同时,标记上是被哪个点为中心感染的,最后撸两边的边界,不是同一个点感染的,就Union。
随手练——LintCode 433 - 小岛数量的更多相关文章
- 随手练——洛谷-P1151(枚举与暴力搜索)
枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...
- LintCode 433. 岛屿的个数(Number of Islands)
LintCode 433. 岛屿的个数(Number of Islands) 代码: class Solution: """ @param grid: a boolean ...
- SUBSTRING / CHARINDEX_函数随手练_2
SUBSTRING / CHARINDEX_函数随手练_2环境:MSSQL 2014(AdventureWorks2008R2附加到2014中的表 Location) /* Learning SQL ...
- case when then 随手练_1
CASE WHEN THEN随手练,就当做练习指法吧 --drop table tbStudent GO Create table tbStudent( studentId int identity( ...
- 随手练——P1141 01迷宫
1.暴力版 本质上就是求连通块数量,那么DFS或者BFS都行,暴力跑. 写完发现题目比较特殊,m次提问,那每次都暴力搜,肯定是要跑死了. #include <iostream> #incl ...
- 随手练——HDU 1078 FatMouse and Cheese(记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意: 一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子 ...
- 随手练——ZOJ 1093 Monkey and Banana(动态规划)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93 一堆科学家研究猩猩的智商,给他M种长方体,每种N个. 然后,将一个 ...
- 随手练——ZOJ-1074 To the Max(最大矩阵和)
To the Max http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1074 动态规划(O(n^3)) 获得一维数组的最大子 ...
- 随手练——DFS小练
1. 单词接龙 https://www.luogu.org/problemnew/show/P1019 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头 ...
随机推荐
- JS 监听键盘按键
1. 实现Ctrl+ Enter 组合键触发事件 document.onkeydown=function(event){ var keyNum = window.event ? event.keyCo ...
- C++11:实用特性
今天逛cplusplus.com发现C++还真多了不少方便使用的特性,先了解些最常用的 初始化列表 vector<,,,}); vector<pair<int, int> &g ...
- cf1056B. Divide Candies(数论 剩余系)
题意 题目链接 求满足\(i^2 + j^2 \% M = 0\)的数对\((i, j)\)的个数,\(1 \leqslant i, j \leqslant 10^9, M \leqslant 100 ...
- jQuery处理JSONP
http://www.g7blogs.com/?p=821 作为一枚前端,提起jsonp大家都不会陌生.特别是在我们组内的业务中,和服务器端交互的数据几乎都是采用这种形式.但假如要让你用原生的JS写出 ...
- Flutter知识点:数据存储之sqflite
sqflite是一款轻量级的关系型数据库,类似SQLite. 在Flutter平台我们使用sqflite库来同时支持Android 和iOS. 使用介绍 1.首选需要在pubspec.yaml 导入库 ...
- 微信小程序开发8-小程序的宿主环境(1)
1.小程序的运行环境分成渲染层和逻辑层,第2章提到过 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层.小程序的渲染层和逻辑层分离是经过很多考虑得出来的模型 2. 1.渲染层和数据 ...
- ButterKnife 初体验
ButterKnife 环境搭建 在project的build.gradle文件中添加依赖的插件 //ButterKnife 的插件 // classpath 'com.jakewharton:but ...
- 在Qt中使用Font Awesome图标
官网: http://fontawesome.io/中文网: http://www.fontawesome.com.cn/GitHub: https://github.com/FortAwesome/ ...
- PRML读书笔记——线性回归模型(上)
本章开始学习第一个有监督学习模型--线性回归模型."线性"在这里的含义仅限定了模型必须是参数的线性函数.而正如我们接下来要看到的,线性回归模型可以是输入变量\(x\)的非线性函数. ...
- YII+DWZ三级城市联动挂件
挂件PHP文件 class CountryCityCombox extends RXWidget { public $provinceId = 2; public $cityId = 3687; pu ...