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 - 小岛数量的更多相关文章

  1. 随手练——洛谷-P1151(枚举与暴力搜索)

    枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...

  2. LintCode 433. 岛屿的个数(Number of Islands)

    LintCode 433. 岛屿的个数(Number of Islands) 代码: class Solution: """ @param grid: a boolean ...

  3. SUBSTRING / CHARINDEX_函数随手练_2

    SUBSTRING / CHARINDEX_函数随手练_2环境:MSSQL 2014(AdventureWorks2008R2附加到2014中的表 Location) /* Learning SQL ...

  4. case when then 随手练_1

    CASE WHEN THEN随手练,就当做练习指法吧 --drop table tbStudent GO Create table tbStudent( studentId int identity( ...

  5. 随手练——P1141 01迷宫

    1.暴力版 本质上就是求连通块数量,那么DFS或者BFS都行,暴力跑. 写完发现题目比较特殊,m次提问,那每次都暴力搜,肯定是要跑死了. #include <iostream> #incl ...

  6. 随手练——HDU 1078 FatMouse and Cheese(记忆化搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意: 一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子 ...

  7. 随手练——ZOJ 1093 Monkey and Banana(动态规划)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93 一堆科学家研究猩猩的智商,给他M种长方体,每种N个. 然后,将一个 ...

  8. 随手练——ZOJ-1074 To the Max(最大矩阵和)

    To the Max http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1074 动态规划(O(n^3)) 获得一维数组的最大子 ...

  9. 随手练——DFS小练

    1. 单词接龙 https://www.luogu.org/problemnew/show/P1019 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头 ...

随机推荐

  1. R 语言—基本绘图

    https://www.harding.edu/fmccown/r/   这个网站上有壮观的 R 绘制的实际图形 下面只记录自己感兴趣的内容 单变量绘图下包含 1. 带状图 2. 茎叶图 3. 直方图 ...

  2. hdu 3415 Max Sum of Max-K-sub-sequence 单调队列。

    Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  3. Hadoop worldcount

    以前的公司和现在的公司,都用到了hadoop和hdfs.一直没入门,今天照着官网写了一个hadoop worldcount demo 1. hadoop是一个框架,什么是框架,spring是一个框架. ...

  4. Q:接口与抽象类

    博文回答一下两个问题: 接口和抽象类的区别 选用接口和抽象类的依据 对于问题1: 从java语法的角度上来说,接口的所有成员和方法都是public的,且其方法均为abstract的.直到jdk1.8之 ...

  5. 不得不知的npm常用指令

    前端进阶肯定会遇到npm(包管理工具)的使用,下面是我总结的一些比较实用的npm指令: npm install <name>安装nodejs的依赖包 例如npm install expre ...

  6. laravel开发之-网站初建

    1 cmd 打开电脑命令窗口 2 目录切换到网站根目录 3 输入命令:php artisan serve 4 model 生成命令:php artisan make:model 需要生成的model名 ...

  7. AngularJS+RequireJs实现动态加载JS和页面的方案研究【中】

    3.动态加载的内容: home.js [html] view plain copy 在CODE上查看代码片派生到我的代码片 define(['app'], function(app) { app.co ...

  8. android红米等关于读取本地文件夹图片获取路径的问题的解决

    在Android开发中,有从本地文件夹中读取图片的功能,使用一下代码打开图片选择列表: Intent intent = new Intent();   intent.setAction(Intent. ...

  9. JMeter测试WEB性能入门

    一.JMeter介绍 1.Apache JMeter是什么 Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于W ...

  10. Selenium IDE录制脚本

    一.当Selenium IDE中Format没有转换格式时,操作:Options—Options...—勾选Enable experimental features