Débit d'eau de l'Atlantique Pacifique
Guide détaillé et implémentation de Python pour le problème « Débit d'eau dans l'Atlantique Pacifique ».
1. Apprendre
Le problème du « débit d'eau dans l'Atlantique Pacifique » est un défi clé dans la section Graphiques.
Cette implémentation se concentre sur la logique de niveau simple dans Python.
Nous accordons la priorité à la précision technique et à la lisibilité du code dans les solutions que nous proposons.
2. Real-World Applications
3. Visual Intuition
Visualisation du flux logique pour le débit d'eau de l'Atlantique Pacifique.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Lisez attentivement l'énoncé du problème concernant l'écoulement de l'eau dans l'Atlantique Pacifique.
2. Formulate brute force
Rédigez une solution itérative simple.
3. Identify inefficiency
Recherchez les calculs redondants.
4. Optimize search path
Utilisez le hachage ou le tri pour accélérer le processus.
5. Final Implementation
Nettoyer le code pour les normes de production.
Énoncé du problème
Il existe une île rectangulaire m x n qui borde à la fois l’océan Pacifique et l’océan Atlantique. L'océan Pacifique touche les bords gauche et supérieur de l'île, et l'océan Atlantique touche les bords droit et inférieur de l'île.
L'île est divisée en une grille de cellules carrées. Vous recevez une matrice entière m x n de hauteurs où heights[r][c] représente la hauteur au-dessus du niveau de la mer de la cellule à la coordonnée (r, c).
L'eau de pluie peut s'écouler vers les cellules voisines directement au nord, au sud, à l'est et à l'ouest si la hauteur de la cellule voisine est inférieure ou égale à la hauteur de la cellule actuelle. L'eau peut s'écouler de n'importe quelle cellule adjacente à un océan vers cet océan.
Renvoie une liste 2D de coordonnées de grille où result[i] = [ri, ci] indique que l'eau de pluie peut s'écouler de la cellule (ri, ci) vers les océans Pacifique et Atlantique.
Écrivez une fonction pacificAtlantic(heights: List[List[int]]) -> List[List[int]].
- •m == len(heights)
- •n == len(heights[0])
- •1 <= m, n <= 200
- •0 <= heights[i][j] <= 10^5
Exemples
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]]
These coordinates can flow to both Pacific (via top/left) and Atlantic (via bottom/right) oceans.
heights = [[1]]
[[0,0]]
The single cell borders both oceans directly.
Need a Hint?
Edge Cases to Watch
- Structures d'entrée vides
- Entrées à élément unique
- Grandes limites numériques
Prêt à résoudre ?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
Aperçus et variations des entretiens
Répartition de l'analyse de complexité
Pourquoi le temps: Directly evaluates all possibilities.
Pourquoi l'espace: Uses standard local memory.
Pourquoi le temps: Optimized paths reduce total operations.
Pourquoi l'espace: May trade memory for speed.
Code Python de solution optimisée
Code Python de solution optimisée
def pacific_atlantic_opt(heights):
ROWS, COLS = len(heights), len(heights[0])
pac, atl = set(), set()
def dfs(r, c, visit, prevHeight):
if ((r, c) in visit or r < 0 or c < 0 or r == ROWS or c == COLS or heights[r][c] < prevHeight):
return
visit.add((r, c))
dfs(r + 1, c, visit, heights[r][c])
dfs(r - 1, c, visit, heights[r][c])
dfs(r, c + 1, visit, heights[r][c])
dfs(r, c - 1, visit, heights[r][c])
for c in range(COLS):
dfs(0, c, pac, heights[0][c])
dfs(ROWS - 1, c, atl, heights[ROWS - 1][c])
for r in range(ROWS):
dfs(r, 0, pac, heights[r][0])
dfs(r, COLS - 1, atl, heights[r][COLS - 1])
res = []
for r in range(ROWS):
for c in range(COLS):
if (r, c) in pac and (r, c) in atl:
res.append([r, c])
return resCode de force brute (spoiler gardé)
Code de force brute (spoiler gardé)
def pacific_atlantic_brute(heights):
res = []
ROWS, COLS = len(heights), len(heights[0])
def can_reach(r, c, target_set):
visited = set()
q = [(r, c)]
visited.add((r, c))
while q:
curr_r, curr_c = q.pop(0)
if (curr_r, curr_c) in target_set: return True
for dr, dc in [[1,0], [-1,0], [0,1], [0,-1]]:
nr, nc = curr_r + dr, curr_c + dc
if 0 <= nr < ROWS and 0 <= nc < COLS and (nr, nc) not in visited and heights[nr][nc] <= heights[curr_r][curr_c]:
visited.add((nr, nc))
q.append((nr, nc))
return False
pac_border = set([(0, c) for c in range(COLS)] + [(r, 0) for r in range(ROWS)])
atl_border = set([(ROWS-1, c) for c in range(COLS)] + [(r, COLS-1) for r in range(ROWS)])
for r in range(ROWS):
for c in range(COLS):
if can_reach(r, c, pac_border) and can_reach(r, c, atl_border):
res.append([r, c])
return resAlgorithm Pattern Checklist
When dealing with Graphs data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
Key Revision Notes
Les propriétés du problème des graphiques standard s’appliquent.
Questions connexes
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
Ressources Python recommandées
Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.
Boucles Python
Apprenez à utiliser les boucles Python pour parcourir les données. Maîtrisez les bonnes pratiques pour les boucles, while, break, continue et loop avec des exemples interactifs.
Comment trier une liste en Python
Apprenez à trier une liste en Python à l'aide de la méthode sort() et de la fonction sorted(). Découvrez des exemples de tri de clés personnalisé et d’ordre inverse.
Aide-mémoire sur le flux de contrôle Python
Maîtrisez les instructions conditionnelles, les boucles et les structures de contrôle de boucle en Python. Apprenez si-sinon, pendant, pendant, faites une pause et continuez.
Python vs JavaScript : quel langage de programmation est le meilleur ?
Une comparaison complète entre Python et JavaScript. Explorez les différences de syntaxe, les performances, les cas d'utilisation (backend et frontend) et des exemples de codage.