当前位置: 首页 > news >正文

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

题目

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

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

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

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

示例 1:

输入: 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

思路

        题目的意思是要找既可以流入太平洋又可以流入大西洋的地块,所以我们可以从边界开始找比自己还要大的单元格,从太平洋的左边界和上边界出发,找比自己大的单元格,标记出所有能让水流入太平洋的单元格;从大西洋的右边界和下边界出发,也是找比自己大的单元格,标记出所有能让水流入大西洋的单元格。最后判断单元格是否同时被标记为能流向太平洋和大西洋,符合条件就可以加入结果数组。

代码

class Solution {
public:vector<vector<int>> d,t,ans;//d和t分别标记可以流向太平洋和大西洋的单元格int n,m;// n 和 m 分别表示矩阵的行数和列数void dfs(vector<vector<int>>& heights, vector<vector<int>>& visited, int i, int j)  {  if(visited[i][j]==1) return;//单元格已经被访问过,直接返回visited[i][j] = 1;//标记为已访问//单元格既可以流向太平洋又可以流向大西洋if(d[i][j]&&t[i][j]) ans.push_back({i,j}); //上下左右搜索大于等于当前格高度的单元格if(i-1>=0&&heights[i-1][j]>=heights[i][j]) dfs(heights,visited,i-1,j);if(i+1<n&&heights[i+1][j]>=heights[i][j]) dfs(heights,visited,i+1,j); if(j-1>=0&&heights[i][j-1]>=heights[i][j]) dfs(heights,visited,i,j-1);if(j+1<m&&heights[i][j+1]>=heights[i][j]) dfs(heights,visited,i,j+1); }vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {n=heights.size(),m=heights[0].size();d=t=vector<vector<int>>(n,vector<int>(m,0));//初始化//从太平洋左上,大西洋右下边界开始搜索for(int i=0;i<n;++i) dfs(heights,d,i,0);for(int i=0;i<n;++i) dfs(heights,t,i,m-1);for(int j=0;j<m;++j) dfs(heights,d,0,j);for(int j=0;j<m;++j) dfs(heights,t,n-1,j);return ans;}
};

相关文章:

  • 小程序 日历选择 支持前后月份切换
  • C++中的引用:深入理解与实用示例
  • 【DeepSeek 学习推理】Llumnix: Dynamic Scheduling for Large Language Model Serving
  • 实验七 ADC0804 数字电压表
  • 【每天一个知识点】大模型的幻觉问题
  • 访问Maven私服的教程
  • leetcode:1295. 统计位数为偶数的数字(python3解法)
  • JAVA设计模式——(二)组合模式
  • Linux内核编译(Ubuntu)
  • 利用参考基因组fa和注释文件gff提取蛋白编码序列
  • Ubuntu 22.04安装IGH
  • 【DeepSeek 学习推理】Llumnix: Dynamic Scheduling for Large Language Model Serving实验部分
  • OpenCv高阶(七)——图像拼接
  • 如何批量为多个 Word 文档添加水印保护
  • tomcat集成redis实现共享session
  • AWS S3企业级部署解决方案:从入门到高可用性实践
  • 108. 将有序数组转换为二叉搜索树
  • 诠视科技MR眼镜如何使用头瞄点和UGUI交互
  • Unity-GC详解
  • 机器学习逻辑回归损失函数与正则化技术深度解析
  • 智飞生物一季度营收下滑79%,连续三个季度亏损,称业绩波动与行业整体趋势一致
  • 著名政治学学者、中国人民大学教授仝志敏逝世
  • 江西省人大教育科学文化卫生委员会主任委员王水平被查
  • 吕治国执掌全国唯一的热带海洋大学,曾从教育部“空降”海南
  • 全球南方声势卓然壮大的历史逻辑——写在万隆会议召开70周年之际
  • 明查|俄罗斯征兵部门突袭澡堂抓捕壮丁?