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

规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。

请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。

提示:

  1. 输出坐标的顺序不重要
  2. m 和 n 都小于150

示例:

给定下面的 5x5 矩阵:太平洋 ~   ~   ~   ~   ~ ~  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]] (上图中带括号的单元).

思路:可以采用两步法,先找到能流到太平洋的大陆,即从左和上边开始搜索,如果下一个节点(左上右下)比当前节点高或相等,水就能流过去,把对应的二维数组标注为true,同理对大西洋即右下边做相同的操作,对另一个二维数组可以流进大西洋的节点标注true,最后对应位置两个二维数组都标注为true的地方就是既能流进太平洋也能流进大西洋的地方。

参考代码:

class Solution {
public:
void dfs(vector<vector<bool>> &visit, vector<vector<int>>& matrix, int r, int c) {visit[r][c] = true;if ((r - 1) >= 0 && !visit[r-1][c] && matrix[r - 1][c] >= matrix[r][c]) dfs(visit, matrix, r - 1, c);if ((r + 1) < matrix.size() && !visit[r + 1][c] && matrix[r + 1][c] >= matrix[r][c]) dfs(visit, matrix, r + 1, c);if ((c - 1) >= 0 && !visit[r][c-1] && matrix[r][c - 1] >= matrix[r][c]) dfs(visit, matrix, r, c - 1);if ((c + 1) < matrix[0].size() && !visit[r][c+1] && matrix[r][c + 1] >= matrix[r][c]) dfs(visit, matrix, r, c + 1);
}
vector<pair<int, int>> pacificAtlantic(vector<vector<int>>& matrix) {vector<pair<int, int>> res;if (matrix.empty()) return res;int m = matrix.size(), n = matrix[0].size();vector<vector<bool>> visit_pacific(matrix.size(), vector<bool>(matrix[0].size(), false));vector<vector<bool>> visit_atlantic(matrix.size(), vector<bool>(matrix[0].size(), false));for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (i == 0 || j == 0) visit_pacific[i][j] = true;if (i == (m - 1) || j == (n - 1)) visit_atlantic[i][j] = true;}}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (i == 0 || j == 0) dfs(visit_pacific, matrix, i, j);if (i == (m - 1) || j == (n - 1)) dfs(visit_atlantic, matrix, i, j);}}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (visit_atlantic[i][j] && visit_pacific[i][j]) res.push_back(make_pair(i, j));}}return res;
}
};

Pacific Atlantic Water Flow 太平洋大西洋水流问题相关推荐

  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 417. Pacific Atlantic Water Flow | 417. 太平洋大西洋水流问题(DFS,经典“感染”思路)

    题目 https://leetcode.com/problems/pacific-atlantic-water-flow/ 题解 一开始的错误思路:(区分"主动"与"被动 ...

  4. LeetCode Pacific Atlantic Water Flow(flood fill)

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

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

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

  6. 力扣417题太平洋大西洋水流问题

    力扣417题太平洋大西洋水流问题 题目描述:有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋" ...

  7. 365天挑战LeetCode1000题——Day 081 统计子串中的唯一字符 地图分析 太平洋大西洋水流问题

    828. 统计子串中的唯一字符 按贡献值,也就是每个字符可能在多少个字符串中出现来进行计算,大大降低了复杂度 代码实现(部分看题解) class Solution {public:int unique ...

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

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

  9. 力扣417 太平洋大西洋水流问题

    417. 太平洋大西洋水流问题 - 力扣(LeetCode) 核心: 建立两个和给定矩阵宽高一致的矩阵,分别表示太平洋和大西洋 从边界出发,深度优先遍历矩阵,继续递归前进行条件的限制:结点没有超出界限 ...

最新文章

  1. C++知识点27——使用C++标准库(常用的泛型算法2)
  2. Binder跨进程通信原理(二):内存映射mmap原理分析
  3. location.hash属性介绍
  4. ACM MM 2021 | 面向多模态情绪识别的双流异质图递归神经网络
  5. Java黑皮书课后题第5章:*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生
  6. leetcode 238. Product of Array Except Self | 238. 除自身以外数组的乘积(Java)
  7. java互联网架构师入门进阶之路
  8. 读写Excel 用 xlsxwriter,openpyxl 更灵活
  9. 编译驱动的Makefile解析
  10. Linux工作笔记023---Centos7 查看系统安装了什么软件_多少软件
  11. 常见存储的串口连接管理方法
  12. linux常用操作命令总结
  13. java.util.concurrent.ExecutionException 错误解决。
  14. EPP-域名映射(RFC5731翻译)
  15. 笔记本屏幕 亮度 背光调节 工具 c++ 用来解决亮度调节功能键失效问题
  16. Asp.Net MVC中身份认证和授权
  17. 光源专家的8个打光技巧
  18. tensorflow学习笔记(二十七):leaky relu
  19. AHB2APB桥接器设计(2)——同步桥设计的介绍
  20. 生而强悍的iQOO如何在安卓手机阵营成功跑出?

热门文章

  1. 终极解决重启服务器后mysql启动失败 报 ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).
  2. 《全民攻城》开心周末,好礼相赠
  3. Co. - Microsoft - Windows - 快捷键
  4. 禅道 配置(企业微信及云之家)群组机器人接收信息
  5. 在vue中使用velocity动画库实现列表交错过渡
  6. python随机点名程序 图形化_python写一个随机点名软件,python随机点名,最近有个随机点名软件...
  7. 未来五年 LED智慧透明屏未来3大发展趋势
  8. uniapp结合uView组件库做项目中遇到的系列问题(一)
  9. jquery scroll 滚动失效
  10. CUMT数据库SQL实验