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. Entity FreamWork框架

    实体框架 (Entity Framework) 1.是微软以ADO.Net为基础所发展出来的对象关系对应(O/R Mapping)解决方案. 2.实体框架Entity Framework是ADO.Ne ...

  2. Java基础教程(4)--面向对象概念

      如果你之前从来没有使用过面向对象编程语言,那么在学习Java之前需要先理解几个有关面向对象编程的基本概念.这篇教程将会向你介绍对象.类.集成.接口和包的概念,以及这些概念是如何与现实世界相关联,并 ...

  3. 五:SpringCloud-Zuul

    九:zuul路由网关 1.概述 1.1 是什么 Zuul包含了对请求的路由和过滤两个最主要的功能: 其中==路由功能==负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础. 而==过 ...

  4. 【原】spring boot source 1.5 中不支持 diamond 运算符

    最近要开发新的项目,就花了几天时间看了下spring boot的相关资料,然后做了一个demo,不得不说开发效率确实很快,几行注解就完成了事务,aop,数据库等相关配置:但由于先前习惯了spring ...

  5. 判断是手机端还是电脑端 isMobile()

    1.在PublicController控制器中写好判断手机端方法. <?php namespace Home\Controller; use Think\Controller; class Pu ...

  6. BZOJ1968 [Ahoi2005] 约数研究

    Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...

  7. JS判断浏览器版本

    CSS html,body{ height: 100%; } body{ margin: 0 } div{ padding-left: 50px; } .span{ padding: 5px 15px ...

  8. 如何从只会 C++ 语法的水平到达完成项目编写软件的水平?

    原文:https://www.zhihu.com/question/29702729 学习 C++ 有一段时间了,但只是停留在熟悉语法阶段,在看 C++primer,不过感觉这本书比较深奥,不太适合, ...

  9. 对WebSocket技术的学习与探索(一)

    WebSocket 简要介绍 WebSocket protocol 是HTML5一种新的协议. 它实现了浏览器与服务器全双工通信(full-duple). 一开始的握手需要借助HTTP请求完成. We ...

  10. MySQL经典错误

    本文目录: Top 1:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行)Top 2:(主从复制报错类型)Top 3:MySQL安装过程中的报错Top 4:数 ...