计算岛屿的数量-算法题(字节笔试题,做出来了,也被撸了)

题目

有一个二维数组,其中每个元素要么是1或者0,1表示土地,连起来的1表示一个岛屿,0表示海,请计算出来二维数组用有多少个岛屿

比如:

{
  {
  1, 1, 1, 0, 1},
 {0, 1, 0, 1, 0},
 {
  1, 0, 1, 1, 1},
 {
  1, 1, 0, 1, 0}};

可以看出这二维数组中有四个岛屿

解题

通过深度优先来做,遍历过的需要做标记,碰到1开始递归标记相邻的1,碰到0就return

public class NumIslandsTest {

  public static void main(String[] args) {
    int[][] dots = {
  {1, 0, 1, 0, 1}, {0, 1, 0, 1, 0}, {1, 0, 1, 0, 1}, {0, 1, 0, 1, 0}};
    int num = getNumIslands(dots);
    System.out.println(num);
  }

  private static int getNumIslands(int[][] dots) {
    int result = 0;
    for (int i = 0; i < dots.length; i++) {
      for (int j = 0; j < dots[i].length; j++) {
        if (dots[i][j] == 1) {
          result++;
          mark(dots, i, j);
        }
      }
    }
    return result;
  }

  private static void mark(int[][] dots, int i, int j) {
    int iMax = dots.length;
    int jMax = dots[0].length;
    if (i >= iMax || j >= jMax || i < 0 || j < 0) {
      return;
    }
    if (dots[i][j] != 1) {
      return;
    }
    dots[i][j] = 2;
    mark(dots, i - 1, j);
    mark(dots, i, j + 1);
    mark(dots, i + 1, j);
    mark(dots, i, j - 1);
  }
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 14:14:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 14:14:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 14:14:04       87 阅读
  4. Python语言-面向对象

    2024-02-02 14:14:04       96 阅读

热门阅读

  1. vue的组件化和模块化

    2024-02-02 14:14:04       56 阅读
  2. WINHTTP忽略HTTPS证书

    2024-02-02 14:14:04       54 阅读
  3. 蓝桥杯 压缩矩阵

    2024-02-02 14:14:04       59 阅读
  4. ES7.17由于IP变化导致的故障及恢复

    2024-02-02 14:14:04       60 阅读
  5. 详解Keras3.0 Layer API: Base RNN layer

    2024-02-02 14:14:04       54 阅读
  6. Mysql -- 数据迁移

    2024-02-02 14:14:04       51 阅读