news 2026/10/6 2:06:45

代码随想录 417.太平洋大西洋水流问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录 417.太平洋大西洋水流问题

思路:本题的起点(所求答案)不明确,但是终点(上下左右四个边界)明确。所以从边界出发可以更方便地找到答案。

1.边界:heights中的i = 0或者i = m - 1;或者j = 0或者j = n - 1的格子。

2.答案:既可流向太平洋也可流向大西洋的格子。

(1)对于可流向太平洋的格子,从上边界(i = 0)和左边界(j = 0)倒着往高处走,所有能访问到的格子都是可以流向太平洋的格子。

(2)对于可流向大西洋的格子,从下边界(i = m - 1)和右边界(j = n - 1)倒着往高处走,所有能访问到的格子都是可以流向大西洋的格子。

3.计算这两类格子的交集,就是既可流向太平洋也可流向大西洋的格子。

附代码:

class Solution { //左右上下 private static final int[][] DIRS = {{0,-1},{0,1},{-1,0},{1,0}}; public List<List<Integer>> pacificAtlantic(int[][] heights) { int m = heights.length,n = heights[0].length; //从太平洋边界出发 boolean[][] pacificVis = new boolean[m][n]; for(int j = 0;j < n;j++){ dfs(0,j,pacificVis,heights); //上边界 } for(int i = 1;i < m;i++){ dfs(i,0,pacificVis,heights); //左边界,i从1开始是因为(0,0)已经包含在上边界中 } //从大西洋边界出发 boolean[][] atlanticVis = new boolean[m][n]; for(int j = 0;j < n;j++){ dfs(m - 1,j,atlanticVis,heights); //下边界 } for(int i = 0;i < m - 1;i++){ dfs(i,n - 1,atlanticVis,heights); //右边界 最后一列是m - 2是因为(m - 1,n - 1)已经包含在下边界中 } //交集即为答案 List<List<Integer>> res = new ArrayList<>(); for(int i = 0;i < m;i++){ for(int j = 0;j < n;j++){ if(pacificVis[i][j] && atlanticVis[i][j]){ res.add(List.of(i,j)); } } } return res; } private void dfs(int i,int j,boolean[][] vis,int[][] heights){ if(vis[i][j]){ //避免重复访问,避免反复横跳无限递归 return; } vis[i][j] = true; //标记(i,j)已访问 for(int[] d : DIRS){//枚举相邻格子 int x = i + d[0],y = j + d[1]; if(x >= 0 && x < heights.length && y >= 0 && y < heights[x].length && heights[x][y] >= heights[i][j]){ //往高处走 dfs(x,y,vis,heights); } } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 2:40:40

从「知道死锁」到「真正理解死锁」:一次 MySQL 锁机制的学习记录

1. 为什么我觉得“我懂死锁”&#xff0c;但又好像没真懂&#xff1f;在学习 MySQL 的过程中&#xff0c;死锁几乎是一个“必学概念”&#xff1a;两个事务互相等待数据库回滚其中一个这些我很早就知道了。但在真正开始深入 MySQL 锁机制之前&#xff0c;我发现一个问题&#x…

作者头像 李华
网站建设 2026/10/5 0:31:59

【计算机毕设推荐】基于Spark+Python的饮食风味数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习

✍✍计算机毕设指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡有什么问题可以…

作者头像 李华
网站建设 2026/10/5 21:12:33

小米AI音箱固件兼容性终极指南:告别配置失败,让xiaogpt完美运行

你是否曾经满怀期待地配置好xiaogpt&#xff0c;却发现小米AI音箱毫无反应&#xff1f;或者升级固件后&#xff0c;原本流畅的对话突然中断&#xff1f;别担心&#xff0c;你不是一个人&#xff01;通过本文的深度测试与分析&#xff0c;我们将帮你彻底解决这些兼容性难题。 【…

作者头像 李华
网站建设 2026/10/5 3:13:00

Cloudpods多云管理平台:从零开始的完整部署与使用指南

Cloudpods多云管理平台&#xff1a;从零开始的完整部署与使用指南 【免费下载链接】cloudpods 开源、云原生的多云管理及混合云融合平台 项目地址: https://gitcode.com/yunionio/cloudpods Cloudpods是一款开源、云原生的多云管理及混合云融合平台&#xff0c;能够帮助…

作者头像 李华
网站建设 2026/10/4 15:48:19

VFlow高性能流处理平台终极部署指南

项目快速概览 【免费下载链接】vflow 项目地址: https://gitcode.com/gh_mirrors/vfl/vflow VFlow是由EdgeCast开发的一款高性能、可扩展且可靠的开源流处理平台&#xff0c;专为IPFIX、sFlow和Netflow数据收集而设计。这个基于纯Golang构建的解决方案能够高效处理网络…

作者头像 李华
网站建设 2026/10/5 6:37:36

如何判断高低温交变湿热试验箱品牌的质量是否过硬?

在环境可靠性测试领域&#xff0c;高低温交变湿热试验箱是评估产品耐候性与稳定性的关键设备。选购一台质量过硬的试验箱&#xff0c;不仅关乎测试数据的准确性&#xff0c;更直接影响研发进度与产品质量。面对市场上众多的品牌&#xff0c;用户需从核心技术、制造工艺、长期稳…

作者头像 李华