题目

https://leetcode.com/problems/pacific-atlantic-water-flow/

题解

一开始的错误思路:(区分“主动”与“被动”的过程)

正确答案参考视频:https://leetcode-cn.com/problems/pacific-atlantic-water-flow/solution/java-si-lu-qing-xi-dai-ma-jian-ji-by-ven-4cds/

看了视频的思路之后,发现其实这是一个经典的“感染”问题…代码迅速搞定。

class Solution {int M;int N;public List<List<Integer>> pacificAtlantic(int[][] heights) {M = heights.length;N = heights[0].length;boolean[][] seen = new boolean[M][N];boolean[][] LU = new boolean[M][N];for (int i = 0; i < M; i++) {dfs(heights, LU, seen, i, 0);}for (int j = 0; j < N; j++) {dfs(heights, LU, seen, 0, j);}boolean[][] RD = new boolean[M][N];seen = new boolean[M][N];for (int i = M - 1; i >= 0; i--) {dfs(heights, RD, seen, i, N - 1);}for (int j = N - 1; j >= 0; j--) {dfs(heights, RD, seen, M - 1, j);}List<List<Integer>> res = new ArrayList<>();for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (LU[i][j] && RD[i][j]) {ArrayList<Integer> list = new ArrayList<>();list.add(i);list.add(j);res.add(list);}}}return res;}public void dfs(int[][] m, boolean[][] A, boolean[][] seen, int i, int j) {if (i < 0 || j < 0 || i == M || j == N) return;seen[i][j] = true;A[i][j] = true;if (i > 0 && m[i - 1][j] >= m[i][j] && !seen[i - 1][j]) dfs(m, A, seen, i - 1, j);if (j > 0 && m[i][j - 1] >= m[i][j] && !seen[i][j - 1]) dfs(m, A, seen, i, j - 1);if (i < M - 1 && m[i + 1][j] >= m[i][j] && !seen[i + 1][j]) dfs(m, A, seen, i + 1, j);if (j < N - 1 && m[i][j + 1] >= m[i][j] && !seen[i][j + 1]) dfs(m, A, seen, i, j + 1);}
}

leetcode 417. Pacific Atlantic Water Flow | 417. 太平洋大西洋水流问题(DFS,经典“感染”思路)相关推荐

  1. 【LeetCode】417. Pacific Atlantic Water Flow 太平洋大西洋水流问题

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/pacific- ...

  2. 417 Pacific Atlantic Water Flow 太平洋大西洋水流

    详见:https://leetcode.com/problems/pacific-atlantic-water-flow/description/ C++: class Solution { publ ...

  3. leetcode 419. Battleships in a Board | 419. 甲板上的战舰(二维矩阵DFS经典“感染”思路)

    题目 https://leetcode.com/problems/battleships-in-a-board/ 题解 一道简单的 medium 题,仍然是"感染"的思想,只不过本 ...

  4. LeetCode Pacific Atlantic Water Flow(flood fill)

    问题:给出一个二维数组,数组中的元素非负.左边和上边表示大平洋,右边和下边表示大西洋.水可以向上下左右四个方向流动,但是要求不高于它.要求输出可以到达两大洋的坐标 思路:因为从高到不高于当前位置的位置 ...

  5. Pacific Atlantic Water Flow 太平洋大西洋水流问题

    给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处于大陆的右边界和下边界. 规定水流只能按 ...

  6. ​LeetCode刷题实战417:太平洋大西洋水流问题

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

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

    LeetCode 417.太平洋大西洋水流问题 有一个 m × n 的长方形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋&qu ...

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

    题目描述 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处于大陆的右边界和下边界. 规定 ...

  9. 417. 太平洋大西洋水流问题(medium) -力扣(leetCode)逆流而上,JS图的深度优先遍历算法

    ⚡️417. 太平洋大西洋水流问题⚡️ 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处 ...

最新文章

  1. hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据
  2. Chunky Monkey-freecodecamp算法题目
  3. [leetcode]145.二叉树的后序遍历
  4. dynamodb java_使用Java将项目插入DynamoDB表
  5. selenide_使用Selenide进行有效的UI测试
  6. 微信H5 回调_PHP实现微信H5支付
  7. 服务器端加入自动运行的JS代码
  8. 【转】 delphi --- WinSocket应用
  9. spring核心知识点分析
  10. 第10章 代理的使用
  11. paip.提升用户体验----自定义移位操作符重载
  12. 数据库字典收集整理,设计数据表时可拿来查考
  13. 百度文库文档下载操作流程
  14. Python爬虫 - 理解深度优先和广度优先
  15. 动态二维码刷卡触摸按键门禁一体机性能与选型攻略
  16. 华三防火墙应用二层和三层的配置实例
  17. Python实现定时在微信群发送消息
  18. 网易云web安全工程师第一天
  19. JAVA动态任务SCHEDULEJOB
  20. ubuntu系统samba服务器安装,Ubuntu 20.04.1安装Samba服务器及配置

热门文章

  1. CodeForces - 1287B Hyperset(暴力水题)
  2. CodeForces - 1095C Powers Of Two(思维)
  3. oracle函数中bitand,Oracle bitand()函数使用方法
  4. UVa712 S-Trees满二叉树
  5. 安装php-redis遇到Error: Package: php-pecl-igbinary-1.2.1-1.el7.x86_64 (epel)
  6. NKU两题简单题解析(递归分析与位运算技巧)
  7. win32中如何使用CString
  8. Frida之安装和使用教程
  9. 极客精神|自制机械臂!被任正非表扬的华为天才少年
  10. OS- -调度(二)