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

LeetCode 太平洋大西洋水流题解

LeetCode 太平洋大西洋水流题解

题目描述

给定一个 m x n 的高度矩阵,太平洋在大西洋的左侧和上方。找到所有能够流到太平洋和大西洋的单元格。

示例

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

解题思路

方法:BFS

思路

  • 使用 BFS 从太平洋和大西洋的边界分别开始搜索。
  • 记录能够流到太平洋和大西洋的单元格。
  • 返回两者的交集。

复杂度分析

  • 时间复杂度:O(m * n)。
  • 空间复杂度:O(m * n)。

代码实现

from collections import deque def pacific_atlantic(matrix): if not matrix: return [] m, n = len(matrix), len(matrix[0]) pacific = [[False] * n for _ in range(m)] atlantic = [[False] * n for _ in range(m)] def bfs(visited): queue = deque() for i in range(m): queue.append((i, 0)) for j in range(n): queue.append((0, j)) while queue: i, j = queue.popleft() if visited[i][j]: continue visited[i][j] = True for di, dj in [(0, 1), (0, -1), (1, 0), (-1, 0)]: ni, nj = i + di, j + dj if 0 <= ni < m and 0 <= nj < n and not visited[ni][nj] and matrix[ni][nj] >= matrix[i][j]: queue.append((ni, nj)) bfs(pacific) bfs(atlantic) result = [] for i in range(m): for j in range(n): if pacific[i][j] and atlantic[i][j]: result.append([i, j]) return result # 测试 def test_pacific_atlantic(): matrix = [[1, 2, 2, 3, 5], [3, 2, 3, 4, 4], [2, 4, 5, 3, 3], [6, 7, 1, 4, 5], [5, 1, 1, 2, 4]] print(pacific_atlantic(matrix)) if __name__ == "__main__": test_pacific_atlantic()

总结

太平洋大西洋水流是 BFS 的典型应用,从两个大洋的边界开始搜索,找出所有能够流到两个大洋的单元格。

http://www.cnnetsun.cn/news/2437800.html

相关文章:

  • 网安0基础学习之计算机网络基础安全知识
  • 别再瞎调ADC采样率了!用STM32定时器触发,1us精准采集5KHz正弦波的保姆级配置
  • 别再只会用if-else了!用STM32状态机实现按键长短按与双击(附完整代码)
  • DLSS Swapper:三分钟掌握游戏性能优化的终极方案
  • 为什么你的 Agent Debug 成本比开发更高:可观测性缺失带来的灾难
  • 告别背包爆满!TQVaultAE:泰坦之旅装备管理的终极解决方案
  • GodotJS:用JavaScript/TypeScript开发Godot游戏的完整指南
  • 5分钟快速上手:用particles.js为网站添加惊艳粒子特效
  • B站视频下载终极指南:5步轻松掌握BilibiliDown完整教程
  • 卡片里放图片?用 memory:// 协议才是正确打开方式
  • Python机器学习库精选指南:best-of-ml-python项目深度解析与应用
  • SSH 远程登录协议
  • 避开STC8H-ADC的五个常见坑:时钟配置、通道切换与结果读取的注意事项
  • MetaClaw:开源元数据提取工具的设计原理与实战应用
  • 企业如何通过统一api网关管理内部多个ai模型调用
  • 嵌入式开发调试实战:从硬件信号到软件逻辑的完整解决方案
  • MySQL-进阶篇-视图/存储过程/触发器
  • 别再乱改node_modules了!pdfjs-dist字体加载警告的三种正确解决姿势
  • 解决Win11家庭版运行软件程序提示【管理员已阻止你运行此应用】
  • 别再只盯着NXP和Impinj了!盘点5款国产超高频RFID芯片的‘独门绝技’
  • AList搭建好了,下一步怎么用?手把手教你用RaiDrive在Windows上挂载WebDAV本地磁盘
  • CAXA 直线命令
  • AI Agent 项目学习笔记(二):Spring AI 与 ChatClient 主链路解析
  • codex出现Reconnecting和stream disconnected before completion:stream closed before response.complete解决方案
  • 紧急通知:FAO 2024渔业AI伦理新规已生效!NotebookLM合规使用红线清单(含数据脱敏、模型可解释性、渔民知情权三重校验表)
  • 新时代的信息茧房
  • 开源威胁检测工具openclaw-nie-guard部署与实战指南
  • 保姆级图解:用MMDetection3D复现SMOKE3D时,DLA34骨干网络的特征图到底怎么传?
  • 终极指南:5步掌握Rusted PackFile Manager打造Total War模组
  • 如何高效解密QQ音乐文件:QMCDump工具完整使用指南