博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode200. Number of Islands
阅读量:5912 次
发布时间:2019-06-19

本文共 1643 字,大约阅读时间需要 5 分钟。

题目要求

Given a 2d 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.Example 1:11110110101100000000Answer: 1Example 2:11000110000010000011Answer: 3

提供一个二维数组表示一张地图,其中1代表陆地,0代表海洋。问在这张地图上一共有几个陆地.

思路一: union-find并查集

这道题目从经典的数据结构的角度来说可以使用并查集来进行判断,将每一个海洋看做一个集合合并起来,将相邻的陆地通过并查集连接起来。最后查看并查集中剩余下的集合数。

这里使用一个新的二维数组来表示对应地图上的元素属于哪个并查集。在合并的时候先进行判断,如果二者为已经相连的陆地,则无需合并,否则将新的二维数组上的元素指向所在的并查集。

int row;    int column;    char[][] grid;    int count;    int[][] tempRegion;    public int numIslands(char[][] grid) {        if(grid==null || grid.length==0 || grid[0].length==0){            return 0;        }                this.grid = grid;        this.row = grid.length;        this.column = grid[0].length;        this.count = row * column;         this.tempRegion = new int[row][column];        for(int i = 0 ; i

思路二:深度优先搜索

抛开从二者判断是否属于同一个并查集,我们从遍历的角度来看这个问题。其实如果我们没遇到一个陆地,就将属于该陆地的所有领域都标记为已经遍历过。那么下一次遇到一块新陆地的时候,该陆地一定是属于另一个版块。这种算法可以通过深度优先算法思想来实现。一旦遇到一块陆地,就递归的对上下左右的领域进行访问。该算法通过递归实现简洁高效!

public int numIslands2(char[][] grid){        if(grid==null || grid.length==0 || grid[0].length==0) return 0;        this.row = grid.length;        this.column = grid[0].length;        int count = 0;        for(int i = 0 ; i
row || j<0 || j>column || grid[i][j] != '1') return; grid[i][j] = 'X'; merge(grid, i-1, j); merge(grid, i+1, j); merge(grid, i, j-1); merge(grid, i, j+1); }

clipboard.png

想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

转载地址:http://cxmpx.baihongyu.com/

你可能感兴趣的文章
CentOS 7 网络配置
查看>>
matplotlib 交互式导航
查看>>
eclipse的插件未安装成功
查看>>
由装箱引发的——Integer比较的来龙去脉
查看>>
java 深拷贝
查看>>
UnicodeEncodeError: 'ascii' codec can't encode
查看>>
jvm在什么时候进行进行垃圾回收,在什么时候进行扩大内存
查看>>
【转载】强大的命令行工具wmic
查看>>
JavaScript里的数组转化新方法Array.From
查看>>
修改eclipse下maven项目的java文件编译目录路径
查看>>
直接启动tomcat时为tomcat指定JDK 而不是读取环境变量中的配置
查看>>
ubuntu 安装 chef安装
查看>>
需求整理步骤规范
查看>>
《JAVA面向对象的特征 》
查看>>
mongodb基础(1)
查看>>
httpd
查看>>
php 笔试题汇总
查看>>
能冒泡的事件
查看>>
easyui-tree 修改图标
查看>>
变频电源老化测试重要吗?需要做老化测试吗
查看>>