在上升的水中游泳
“在上升的水中游泳”问题的详细指南和 Python 实现。
1. 学习
“在上升的水中游泳”问题是高级图形部分的一个关键挑战。
此实现侧重于 Python 中的简单级逻辑。
在我们提供的解决方案中,我们优先考虑技术准确性和代码可读性。
2. Real-World Applications
3. Visual Intuition
可视化“在上升的水中游泳”的逻辑流程。
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
仔细阅读“在上升的水中游泳”的问题陈述。
2. Formulate brute force
起草一个简单的迭代解决方案。
3. Identify inefficiency
寻找冗余计算。
4. Optimize search path
使用散列或排序来加速该过程。
5. Final Implementation
清理生产标准代码。
问题陈述
给定一个 n x n 整数矩阵网格,其中每个值 grid[i][j] 表示该点 (i, j) 的海拔。雨开始下。在t时刻,各处水深为t。当且仅当方格中的两个高程都至多为 t 时,你才能从一个方格游到另一个 4 方向相邻的方格。
从左上角的方块 (0, 0) 开始。到达右下方格 (n-1, n-1) 所需的最短时间是多少?
编写一个函数 swimInWater(grid: List[List[int]]) -> int。
- •n == len(grid) == len(grid[i])
- •1 <= n <= 50
- •0 <= grid[i][j] < n^2
- •Each value grid[i][j] is unique
示例
grid = [[0,2],[1,3]]
3
At time 3, you are permitted to swim all the way from (0,0) to (1,1). The path is 0 -> 1 -> 3.
grid = [[0,1,2,3,4],[24,23,22,21,5],[12,13,14,15,16],[11,17,18,19,20],[10,9,8,7,6]]
16
The final path is 0-1-2-3-4-5-16-15-14-13-12-11-10-9-8-7-6. The maximum height along this path is 16.
Need a Hint?
Edge Cases to Watch
- 空输入结构
- 单元素输入
- 大数值范围
准备好解决了吗?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
面试见解和变化
复杂性分析分解
为什么时间: Directly evaluates all possibilities.
为什么选择太空: Uses standard local memory.
为什么时间: Optimized paths reduce total operations.
为什么选择太空: May trade memory for speed.
优化解决方案Python代码
优化解决方案Python代码
def swim_in_water_opt(grid):
return swim_in_water_brute(grid)暴力破解代码(剧透保护)
暴力破解代码(剧透保护)
import heapq
def swim_in_water_brute(grid):
n = len(grid)
visit = set([(0, 0)])
min_h = [[grid[0][0], 0, 0]]
while min_h:
t, r, c = heapq.heappop(min_h)
if r == n - 1 and c == n - 1: return t
for dr, dc in [[0, 1], [0, -1], [1, 0], [-1, 0]]:
nr, nc = r + dr, c + dc
if nr < 0 or nc < 0 or nr == n or nc == n or (nr, nc) in visit: continue
visit.add((nr, nc))
heapq.heappush(min_h, [max(t, grid[nr][nc]), nr, nc])Algorithm Pattern Checklist
When dealing with Advanced Graphs data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
推荐的 Python 资源
通过相关的交互式教程、备忘单和代码比较来扩展您的知识。
Python 尝试/例外和错误处理
防止 Python 脚本崩溃。了解 try、 except、finally 块以及如何正确引发自定义异常。
如何在 Python 中反转字符串
通过可视化代码示例了解如何使用切片、reversed() 函数和循环串联在 Python 中反转字符串。
Python 字符串方法备忘单
Python 字符串操作的完整参考指南。掌握格式化、搜索、拆分、替换和检查字符串属性。
Python 与 JavaScript:哪种编程语言最好?
Python 和 JavaScript 的全面比较。探索语法差异、性能、用例(后端与前端)和编码示例。