题目:岛屿的个数
2015-08-19 19:19
183 查看
给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
您在真实的面试中是否遇到过这个题?
Yes
哪家公司问你的这个题?
Airbnb
Alibaba
Amazon Apple
Baidu Bloomberg
Cisco Dropbox
Ebay Facebook
Google Hulu
Intel Linkedin
Microsoft NetEase
Nvidia Oracle
Pinterest Snapchat
Tencent Twitter
Uber Xiaomi
Yahoo Yelp
Zenefits
感谢您的反馈
样例
在矩阵:
中有
相关题目 Expand
3
(union-find)
困难 岛屿的个数II 11 %
public class Solution {
/**
* @param grid a boolean 2D matrix
* @return an integer
*/
public int numIslands(boolean[][] grid) {
// Write your code here
if (grid == null || grid.length == 0) {
return 0;
}
int m = grid.length;
int n = grid[0].length;
boolean[][] visited = new boolean[m]
;// true表示访问过,false表示没有访过
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
visited[i][j] = false;
}
}
int res = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] && !visited[i][j]) {
DPSlands(grid, visited, i, j);
res++;
}
}
}
return res;
}
public void DPSlands(boolean[][] grid, boolean[][] visited, int i, int j) {
if (i < 0 || i >= grid.length) {
return;
}
if (j < 0 || j >= grid[0].length) {
return;
}
if (!grid[i][j] || visited[i][j]) {
return;
}
visited[i][j] = true;
DPSlands(grid, visited, i - 1, j);
DPSlands(grid, visited, i, j - 1);
DPSlands(grid, visited, i + 1, j);
DPSlands(grid, visited, i, j + 1);
}
}
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
您在真实的面试中是否遇到过这个题?
Yes
哪家公司问你的这个题?
Airbnb
Alibaba
Amazon Apple
Baidu Bloomberg
Cisco Dropbox
Ebay Facebook
Google Hulu
Intel Linkedin
Microsoft NetEase
Nvidia Oracle
Pinterest Snapchat
Tencent Twitter
Uber Xiaomi
Yahoo Yelp
Zenefits
感谢您的反馈
样例
在矩阵:
[ [1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1] ]
中有
3个岛.
相关题目 Expand
3
(union-find)
困难 岛屿的个数II 11 %
public class Solution {
/**
* @param grid a boolean 2D matrix
* @return an integer
*/
public int numIslands(boolean[][] grid) {
// Write your code here
if (grid == null || grid.length == 0) {
return 0;
}
int m = grid.length;
int n = grid[0].length;
boolean[][] visited = new boolean[m]
;// true表示访问过,false表示没有访过
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
visited[i][j] = false;
}
}
int res = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] && !visited[i][j]) {
DPSlands(grid, visited, i, j);
res++;
}
}
}
return res;
}
public void DPSlands(boolean[][] grid, boolean[][] visited, int i, int j) {
if (i < 0 || i >= grid.length) {
return;
}
if (j < 0 || j >= grid[0].length) {
return;
}
if (!grid[i][j] || visited[i][j]) {
return;
}
visited[i][j] = true;
DPSlands(grid, visited, i - 1, j);
DPSlands(grid, visited, i, j - 1);
DPSlands(grid, visited, i + 1, j);
DPSlands(grid, visited, i, j + 1);
}
}
相关文章推荐
- 按键原理和软硬件按键消抖动
- PAT-PAT (Advanced Level) Practise 1008. Elevator (20) (简单模拟)【一星级】
- 1094. The Largest Generation
- 8.19 多线程的几种实现方式
- POJ 3279 Dungeon Master
- 在navgationController中添加UISegmentedControl
- wowza简介
- ObjectiveC开发教程--字符串的基本操作处理方法
- 题目:尾部的零
- ItailorCode
- ajax(三) ajax提交表单、ajax实现文件上传
- 什么是进程
- 第十章 面向对象编程:继承和多态
- 题目:将整数A转换为B
- oracle游标:查询并打印员工的姓名和薪水
- iOS中Storyboard使用要点记录
- EF里Guid类型数据的自增长、时间戳和复杂类型的用法
- 题目:字符串查找
- NIO(JDK1.4)--选择器Selector
- 阿里云server安全设定