【每日一题Day245】面试题 16.19. 水域大小 | dfs

news/2024/7/20 20:41:47 标签: 深度优先, 算法

面试题 16.19. 水域大小

你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。

dfs感染~

  • 思路

    对于每一个水域dfs搜索其八个方向连通的水域大小,添加至动态数组中,最后将动态数组排序后返回

    • 为了避免重复访问,访问过一个水域后,将其设置为土地
  • 实现

    class Solution {
        int m, n;
        int[][] land;
        public int[] pondSizes(int[][] land) {
            this.m = land.length;
            this.n = land[0].length;
            this.land = land;
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < m; i++){
                for (int j = 0; j < n; j++){
                    if (land[i][j] == 0){
                        list.add(dfs(i, j));
                    }
                }
            }
            return list.stream().sorted().mapToInt(x -> x).toArray();
        }
        public int dfs(int x, int y){
            int res = 0;
            if (land[x][y] == 0){
                land[x][y] = 1;
                res += 1;
                for (int i = -1; i <= 1; i++){
                    for (int j = -1; j <= 1; j++){
                        if (i == 0 && j == 0) continue;
                        int newX = x + i;
                        int newY = y + j;
                        if (newX >= 0 && newX < m && newY >= 0 && newY < n){
                            res += dfs(newX, newY);
                        }
                    }
                }
            }
            return res;
        }
    }
    
    • 复杂度
      • 时间复杂度: O ( m ∗ n ) \mathcal{O}(m*n) O(mn)
      • 空间复杂度: O ( m ∗ n ) \mathcal{O}(m*n) O(mn)

http://www.niftyadmin.cn/n/461805.html

相关文章

Android之 动画总结

一 动画种类 1.1 动画在Android中运用也非常广泛&#xff0c;如点击按钮&#xff0c;加载框&#xff0c;Activity的转场等都有动画的身影 1.2 常用的动画有以下以下几种 逐帧动画【Frame Animation】&#xff0c;即顺序播放事先准备的图片 补间动画【Tween Animation】&…

Tik Tok 如何提高账户的活跃度和吸引力?

Tik Tok 是一款非常受欢迎的应用程序&#xff0c;它在全球范围内拥有大量的用户和创作者。Tik Tok 在人工智能技术方面投入了大量的资源&#xff0c;并且正在不断改进和扩展其人工智能技术。Tik Tok 正在不断扩展其业务&#xff0c;例如在音乐、视频制作等方面扩展。这表明 Tik…

Vue中用计算属性来实现过滤(比watch来实现好一点)

<html> <head> <meta charset"UTF-8" /> <title>初始条件渲染</title> <!-- 引入Vue --> <script type"text/javascript" src"../js/vue.js"></script> </head> <body> <div i…

kubernetes入门案例

kubernetes入门案例 本文我们通过一个 Java Web 应用例子来介绍 kubernetes 的使用&#xff0c;可以让新手快速上手和实践。 此 Java Web 应用的结构比较简单&#xff0c;是一个运行在 Tomcat 里的 Web App&#xff0c;JSP 页面通过 JDBC 直接访问 MySQL 数据库并展示数据。…

【NLP】PageRank、TextRank算法的原理解析

一、说明 PageRank是经典的网页热度评分算法&#xff0c;在自然语言的热词提取也有同样的意义&#xff08;TextRank&#xff09;&#xff1b;本文详细叙述该算法的原理&#xff0c;配合部分代码演示其原理。 二、PageRank算法的启发因素 2.1 算法兴起 PageRank (PR) 是…

什么是运营?

国内互联网发展史 第一阶段&#xff1a;1984年 - 1993年 &#xff0c;网络向用户的单一输出&#xff1b;第二阶段&#xff1a;1994年 - 2000年 &#xff0c;门户网站与搜索式的野蛮增长。 在这一阶段&#xff0c;互联网提供给用户的是一些可阅读的内容。包含有 “文字”、“图…

k8s控制器之job--第二弹编写Job的定义

与所有的 Kubernetes 对象一样&#xff0c;Job 对象的 YAML 文件中&#xff0c;都需要包括如下三个字段&#xff1a; .apiVersion.kind.metadata Job 对象的 YAML 文件&#xff0c;还需要一个 .spec 字段。 Pod Template .spec.template 是必填字段&#xff1a; 用于定义 …

PID相关参数讲解:1、比例系数Kp与静态误差

PID的结构与公式 来研究静态误差的同学&#xff0c;应该是对PID的原理有一定理解了&#xff0c;简单的概念也不用过多重复。 比例控制时PID控制中最简单的一个&#xff0c;很多能用代码编写PID代码的同学&#xff0c;也不一定理解这个比例系数Kp的意义&#xff0c;以及比例控制…