知识库

记录点点滴滴

LeetCode(200):岛屿数量

这道题出现在算法课第二次OJ题上,这道题就本身而言,很容易想到用BFS/DFS,有意思的是,在本次OJ上最后一个测试点,由于内存的限制,如果不精心设计数据结构,很容易爆内存

题目描述

Problem description

Given a 2d mm * nn grid map of ‘1’s (land) and ‘0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.(1≤m≤1000, 1≤n≤1000)

Input

Line 1: m and n.

Line 2: ‘1’ or ‘0’ in grid and split by spaces

Output

Line 1: number of islands.

Sample Input 1

Sample Output 1

Sample Input 2

Sample Output 2

题解

本题可以用DFS/BFS这两种常见的搜索算法进行求解

但是在本次OJ中,由于最后一个测试用例将内存限制的极其严格,而DFS由于需要递归而调用大量的堆栈资源,而导致众多选手败下阵来。但是改成BFS却不曾料到也因为内存问题改了将近一个小时,不断的优化,下面是个人经验总结

  1. 如果输入的用例只有0/1,或者输入的用例值介于0-255之间,可以将类型定义为bool/char型,减少内存的占用
  2. 对于常用的一些变量,可以在全局中进行声明,相比在函数中的局部定义而言节省空间
  3. 搜索算法不一定要设置一个visited数组,比如这题,求连通的区域个数,可将已访问过的元素置0或者置2,来代替visited数组
  4. 在置0或者置2的时候,紧跟着push入队后进行,也可以节省空间,原因未知

代码

 

 

 

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注