LC-417. 太平洋大西洋水流问题(多源BFS、DFS)

news2024/12/28 19:01:56

417. 太平洋大西洋水流问题

难度中等558

有一个 m × n 的矩形岛屿,与 太平洋大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。

这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heightsheights[r][c] 表示坐标 (r, c) 上单元格 高于海平面的高度

岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。

返回网格坐标 result2D 列表 ,其中 result[i] = [ri, ci] 表示雨水从单元格 (ri, ci) 流动 既可流向太平洋也可流向大西洋

示例 1:

img

输入: heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]]
输出: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]]

示例 2:

输入: heights = [[2,1],[1,2]]
输出: [[0,0],[0,1],[1,0],[1,1]]

提示:

  • m == heights.length
  • n == heights[r].length
  • 1 <= m, n <= 200
  • 0 <= heights[r][c] <= 105

题解来自:宫水三叶https://leetcode.cn/problems/pacific-atlantic-water-flow/solution/by-ac_oier-do7d/

从边出发,只要有比自己高的点,就往高处走,直到走不了为止。

最终返回太平洋和大西洋能走到的点的交集。

说明这些点可以流到太平洋和大西洋。

多源BFS

class Solution {
    int n, m;
    int[][] g;
    public List<List<Integer>> pacificAtlantic(int[][] heights) {
        g = heights;
        m = g.length; n = g[0].length;
        Deque<int[]> d1 = new ArrayDeque<>(), d2 = new ArrayDeque<>();
        boolean[][] res1 = new boolean[m][n], res2 = new boolean[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (i == 0 || j == 0) {
                    res1[i][j] = true;
                    d1.addLast(new int[]{i, j});
                }
                if (i == m - 1 || j == n - 1) {
                    res2[i][j] = true;
                    d2.addLast(new int[]{i, j});
                }
            }
        }
        bfs(d1, res1); bfs(d2, res2);
        List<List<Integer>> ans = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (res1[i][j] && res2[i][j]) {
                    List<Integer> list = new ArrayList<>();
                    list.add(i); list.add(j);
                    ans.add(list);
                }
            }
        }
        return ans;
    }
    int[][] dirs = new int[][]{{1,0},{-1,0},{0,1},{0,-1}};
    void bfs(Deque<int[]> d, boolean[][] res) {
        while (!d.isEmpty()) {
            int[] info = d.pollFirst();
            int x = info[0], y = info[1], t = g[x][y];
            for (int[] di : dirs) {
                int nx = x + di[0], ny = y + di[1];
                if (nx < 0 || nx >= m || ny < 0 || ny >= n) continue;
                if (res[nx][ny] || g[nx][ny] < t) continue;
                d.addLast(new int[]{nx, ny});
                res[nx][ny] = true;
            }
        }
    }
}

DFS

class Solution {
    int n, m;
    int[][] g;
    public List<List<Integer>> pacificAtlantic(int[][] heights) {
        g = heights;
        m = g.length; n = g[0].length;
        boolean[][] res1 = new boolean[m][n], res2 = new boolean[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (i == 0 || j == 0) {
                    if (!res1[i][j]) dfs(i, j, res1);
                }
                if (i == m - 1 || j == n - 1) {
                    if (!res2[i][j]) dfs(i, j, res2);
                }
            }
        }
        List<List<Integer>> ans = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (res1[i][j] && res2[i][j]) {
                    List<Integer> list = new ArrayList<>();
                    list.add(i); list.add(j);
                    ans.add(list);
                }
            }
        }
        return ans;
    }
    int[][] dirs = new int[][]{{1,0},{-1,0},{0,1},{0,-1}};
    void dfs(int x, int y, boolean[][] res) {
        res[x][y] = true;
        for (int[] di : dirs) {
            int nx = x + di[0], ny = y + di[1];
            if (nx < 0 || nx >= m || ny < 0 || ny >= n) continue;
            if (res[nx][ny] || g[nx][ny] < g[x][y]) continue;
            dfs(nx, ny, res);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计Python的文成考研培训管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

详细复习云开发~小程序【云存储、列表的下拉刷新、列表的分页加载】

文章目录一&#xff0c;云开发~云存储1-1&#xff0c;云开发控制台管理文件1-2&#xff0c;上传图片到云存储1-3&#xff0c;给商品列表加商品图片1-4&#xff0c;上传视频到云存储1-5&#xff0c;上传word&#xff0c;excel文件到云存储1-5-1&#xff0c;上传之前先选择文件1-…

我国数据库现状与未来发展趋势

作者&#xff1a;IT圈黎俊杰 一、数据库现状 &#xff08;一&#xff09;国际数据库市场现状 在看国内数据库市场现状前&#xff0c;先看一组国际市场数据库的应用情况。 以2021年4月份数据国际市场数据库热度排名为例&#xff0c;稳居前三的Oracle、MySQL 和 Microsoft SQL …

朗坤环境递交注册:拟募资11亿 陈建湘家族色彩浓厚

雷递网 雷建平 12月19日深圳市朗坤环境集团股份有限公司&#xff08;简称&#xff1a;“朗坤环境”&#xff09;日前更新招股书&#xff0c;并提交注册&#xff0c;准备在深交所创业板上市。朗坤环境计划募资11.22亿元&#xff0c;其中&#xff0c;6.57亿元用于中山市南部组团垃…

目标检测论文解读复现【NO.22】多尺度下遥感小目标多头注意力检测

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

JavaWeb框架(四):JavaWeb项目基于三大组件实现的公司管理系统

MVC实战项目 Web 三大组件实现 公司管理系统需求&#xff1a;项目实战基于会话跟踪技术实现登录功能基于Filter过滤器实现登录验证功能基于Listener监听器监听ServletCntext对象的创建和销毁会话跟踪技术cookiesession对比Filter过滤器入门入门DemoFilter执行流程Filter拦截路径…

基于SSM+Maven+Shiro+Layui+Websocket在线论坛交流聊天bbs系统设计

开发软件&#xff1a;Idea Mysql Redis 开发技术&#xff1a; SSM Maven Shiro Websocket Bootstrap Layui 前台部分 1.用户注册登录模块 用户登录后,可以进行发帖回帖功能,在线签到功能,完善个人信息,添加好友,收藏贴子,评论帖子,点赞功能,记录功能(比如记录今天发生的…

(附源码)ssm巢湖学院校园报修系统 毕业设计 021813

SSM巢湖学院校园报修系统 摘 要 随着互联网大趋势的到来&#xff0c;社会的方方面面&#xff0c;各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去&#xff0c;而其中最好的方式就是建立网络管理系统&#xff0c;并对其进行信息管理。由于现在网络的发达&…

行业认可|墨菲安全登信息通信软件供应链安全社区优秀榜单

11月以来信息通信软件供应链安全社区开展了“软件供应链优秀成果案例”征集评审活动&#xff0c;在 12 月 16 日的结果公示中&#xff0c;墨菲安全软件供应链安全管理平台本次成功入选自主研发创新成果。这是对墨菲安全长期专注在软件供应链安全领域的成果认可&#xff0c;我们…

堆叠自动编码器(Stacked AutoEncoder)

Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列&#xff0c;在图像识别、语音识别、无人驾驶等技术上都已经落地。而百度实质意义上扛起了国内的人工智能的大旗&#xff0c;覆盖无人驾驶、智能助手、图像识别等许多层面。苹果业已开始全面拥抱机器学习&#xf…

Python解题 - CSDN周赛第16期 - 流水还是积水?

问哥在最后30分钟才有空进入比赛&#xff0c;发现满分选手只有两位&#xff0c;就知道大家又遇到坑了。。。其中两道题的数据都多少有点问题。不得不佩服那两位在这种情况下还能拿满分的选手&#xff0c;等到他们分享解题报告后&#xff0c;问哥再来更新代码吧。 第一题&#x…

java Lambda概念 通过实现线程简单体验一下Lambda表达式

首先 我们先对函数式编程 做一个简单的描述 在数学中 函数是 有输入量和输出量的一套计算方案 也就对应程序中的 拿数据 做操作 java 是一个面向对象编程的语言 他强调的做什么都要通过对象完成 而在函数式中就要尽可能摆脱这种思维模式 函数式只在乎做什么 并不强调用什么形…

程序员能纯靠技术渡过中年危机吗?

首先说答案&#xff0c;能&#xff01;程序员可以靠技术渡过中年危机&#xff0c;但是要转变线性思维。 先说说个人情况&#xff0c;80后&#xff0c;从事电机控制软件开发十余年&#xff0c;属于制造业&#xff0c;算嵌入式的一个小分支&#xff0c;相关的细分行业包括电动汽…

元学习和机器学习的对比

目录引言机器学习元学习什么是元学习元学习的流程学习学习函数评价学习函数好坏迭代优化整体框架元学习和机器学习的对比定义的区别数据集划分的区别损失函数的区别两者之间的共通之处总结引言 本篇博客是李宏毅老师元学习课程的笔记。 深度学习大部分时间在调参数。在业界通…

71. SAP ABAP 报表屏幕输入字段如何实现联动效果

有朋友向我咨询,SAP ABAP 报表输入字段,如何实现联动效果? 所谓联动效果,如下图所示,我们有三个输入框,类型都是 Checkbox: 激活缓存使用共享内存使用二级缓存默认情况下,使用共享内存和使用二级缓存这两个 Checkbox 处于禁用状态。只有当我们选中 激活缓存 时,这两个…

【lssvm回归预测】基于灰狼算法优化最小支持向量机GWO-LSSVM数据预测模型含Matlab源码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

[备战蓝桥杯系列]蓝桥杯总结部分经典题题解分享

文章目录题目1:空间题目2:数字三角形题目3:刷题统计题目4:阶乘约数题目5:回路计数本篇文章中的题解是我所写的代码且都是可以运行通过的, 总结出的一篇相对来说比较清晰的个人题解, 希望要备战蓝桥杯的小伙伴能够看到最后(由于本人要参加的是Java组, 所以后面的题解基本都是使用…

Vant 4 - 新版本发布!有赞出品的 Vue3 移动端 UI 组件库,轻量好用,免费开源

主流的 Vue 移动端组件库 Vant 迎来了第四个大版本的更新&#xff0c;用来开发手机端项目非常好用&#xff0c;强烈推荐给各位开发者使用。 关于 Vant 4 Vant 是一个轻量、可靠的移动端组件库&#xff0c;基于 Vue3&#xff0c;由有赞开发并且维护。有赞作为早期以 H5 商城、…

Mysql Yum安装

步骤一&#xff1a;首先下载mysql的yum源配置 1 | wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 步骤二&#xff1a;安装mysql的yum源 1 | yum -y install mysql57-community-release-el7-11.noarch.rpm 步骤三&#xff1a;yum方式安装mysql …

嵌入式开发环境搭建9步走(ubuntu)

学习嵌入式的同学们注意喽!我想你首先得搭建一个开发环境吧!否则你还能咋玩的起来?所以今天说一下嵌入式开发环境搭建。当然嵌入式系统有很多种&#xff0c;今天在这里以主流的ubuntu为例。 一、选择安装ubuntu8.10版本 【这版本可能有点老&#xff0c;这是曹忠明老师几年前写…