MOC NeetCode 150 — Entrenamiento algorítmico
Punto de entrada único al entrenamiento algorítmico siguiendo la lista curada NeetCode 150. 150 problemas organizados en 18 patrones que cubren los fundamentos de coding interviews.
Estado actual: 150 / 150 problemas documentados — TODOS LOS PATRONES COMPLETOS
Referencia rápida de Python: Python Syntax Cheatsheet — todas las estructuras (list, set, dict, Counter, defaultdict, deque, heapq), métodos con complejidad, ejemplos cortos, trampas comunes y patrones por tipo de problema. Ten esta pestaña abierta mientras resuelves.
Formato de cada nota: worked example primero, patrón abstraído, replicar sin mirar. Ver memoria
feedback_learning_style_algorithmic.md.
Resumen de progreso
| Patrón | Total | [OK] Hecho | Pendiente | % |
|---|---|---|---|---|
| 01. Arrays & Hashing | 9 | 9 | 0 | 100% |
| 02. Two Pointers | 5 | 5 | 0 | 100% |
| 03. Sliding Window | 6 | 6 | 0 | 100% |
| 04. Stack | 7 | 7 | 0 | 100% |
| 05. Binary Search | 7 | 7 | 0 | 100% |
| 06. Linked List | 11 | 11 | 0 | 100% |
| 07. Trees | 15 | 15 | 0 | 100% |
| 08. Tries | 3 | 3 | 0 | 100% |
| 09. Heap / Priority Queue | 7 | 7 | 0 | 100% |
| 10. Backtracking | 9 | 9 | 0 | 100% |
| 11. Graphs | 13 | 13 | 0 | 100% |
| 12. Advanced Graphs | 6 | 6 | 0 | 100% |
| 13. 1-D Dynamic Programming | 12 | 12 | 0 | 100% |
| 14. 2-D Dynamic Programming | 11 | 11 | 0 | 100% |
| 15. Greedy | 8 | 8 | 0 | 100% |
| 16. Intervals | 6 | 6 | 0 | 100% |
| 17. Math & Geometry | 8 | 8 | 0 | 100% |
| 18. Bit Manipulation | 7 | 7 | 0 | 100% |
| TOTAL | 150 | 150 | 0 | 100% [OK] |
Convención de iconos en este índice: [OK] archivo creado y wikilink activo · pendiente de crear · número LeetCode oficial · recomendado especialmente · (facil) Easy · (media) Medium · (dificil) Hard.
Problemas con solución C++ añadida (contraste de lenguaje)
Estos 10 problemas tienen además una solución en C++ dentro de su
.md(sección “Solución en C++ — contraste con Python”) + un.cpphermano compilable. Resueltos para estudiar las diferencias Python ↔ C++ en variedad de patrones (hash, two pointers, stack, binary search, punteros de lista, recursión de árbol). Marcados conC++en las tablas. Conecta con (Build_Things/10_cpp_learning/).
- 217-contains-duplicate · 1-two-sum · 49-group-anagrams
- 125-valid-palindrome · 15-3sum · 121-best-time-to-buy-and-sell-stock
- 20-valid-parentheses · 704-binary-search · 206-reverse-linked-list
- 226-invert-binary-tree
01. Arrays & Hashing — [OK] COMPLETO
Idea central del patrón: el dict/set como “memoria” de lo visto. La diferencia entre problemas es qué información asocias a cada elemento (presencia, frecuencia, índice, clave canónica).
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 217 | Contains Duplicate | (facil) | [OK] C++ | “He visto X antes” |
| 242 | Valid Anagram | (facil) | [OK] | Frecuencias con dict / Counter / array 26 |
| 1 | Two Sum | (facil) | [OK] C++ | “He visto el complemento de X” |
| 49 | Group Anagrams | (media) | [OK] C++ | Clave canónica + defaultdict(list) |
| 347 | Top K Frequent Elements | (media) | [OK] | Counter + heap O(n log k), bucket sort O(n) |
| 271 | Encode and Decode Strings | (media) | [OK] | Length-prefix encoding (≈ tu protocolo embebido) |
| 238 | Product of Array Except Self | (media) | [OK] | Prefix * Suffix products in-place O(1) |
| 36 | Valid Sudoku | (media) | [OK] | Set con claves compuestas (múltiples restricciones) |
| 128 | Longest Consecutive Sequence | (media) | [OK] | Set + check de “soy inicio” + análisis amortizado |
02. Two Pointers — [OK] COMPLETO
Idea central del patrón: dos índices que recorren el array (mismo extremo o extremos opuestos) con criterios de avance distintos. Aplica especialmente a arrays ordenados y problemas de palíndromos.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 125 | Valid Palindrome | (facil) | [OK] C++ | Two pointers convergentes con skip de no-alfanuméricos |
| 167 | Two Sum II - Input Array Is Sorted | (media) | [OK] | Monotonía del orden permite descartar 1 candidato por iter |
| 15 | 3Sum | (media) | [OK] C++ | Sort + fix one + two pointers (reducción de 3-Sum a 2-Sum) |
| 11 | Container With Most Water | (media) | [OK] | Greedy local: mover el menor (argumento de descarte) |
| 42 | Trapping Rain Water | (dificil) | [OK] | Two pointers con tracking de máximos (3 niveles de optimización) |
03. Sliding Window — [OK] COMPLETO
Idea central del patrón: ventana de tamaño variable o fijo que se desplaza por la colección, manteniendo invariantes. Para subarrays/substrings con propiedades.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 121 | Best Time to Buy and Sell Stock | (facil) | [OK] C++ | Tracking de mínimo histórico (one-pass) |
| 3 | Longest Substring Without Repeating Characters | (media) | [OK] | Sliding window variable con set / dict de índices |
| 424 | Longest Repeating Character Replacement | (media) | [OK] | Sliding window con tolerancia (len - max_freq <= k) |
| 567 | Permutation in String | (media) | [OK] | Sliding window de tamaño FIJO + match de frecuencias |
| 76 | Minimum Window Substring | (dificil) | [OK] | Sliding window con cobertura (have / need) |
| 239 | Sliding Window Maximum | (dificil) | [OK] | Deque monotónica decreciente (O(n) amortizado) |
04. Stack — [OK] COMPLETO
Idea central del patrón: estructura LIFO para procesar elementos en orden inverso al de inserción. Validación de paréntesis, evaluación de expresiones, “siguiente mayor/menor” (stack monotónico).
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 20 | Valid Parentheses | (facil) | [OK] C++ | LIFO para emparejar delimitadores |
| 155 | Min Stack | (media) | [OK] | Diseño de clase: stack auxiliar para min en O(1) |
| 150 | Evaluate Reverse Polish Notation | (media) | [OK] | Stack para evaluar expresiones (RPN) |
| 22 | Generate Parentheses | (media) | [OK] | Backtracking con poda; intro al patrón 10 |
| 739 | Daily Temperatures | (media) | [OK] | Stack monotónico decreciente (“próximo mayor”) |
| 853 | Car Fleet | (media) | [OK] | Sort + stack con tracking de ETA |
| 84 | Largest Rectangle in Histogram | (dificil) | [OK] | Stack monotónico creciente para áreas máximas |
05. Binary Search — [OK] COMPLETO
Idea central del patrón: búsqueda en O(log n) sobre estructuras ordenadas. La clave es identificar la propiedad monotónica que permite descartar la mitad del espacio en cada paso.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 704 | Binary Search | (facil) | [OK] C++ | Template clásico; las 4 trampas (overflow, <=, +1/-1, <) |
| 74 | Search a 2D Matrix | (media) | [OK] | Matriz como 1D virtual; divmod(mid, n) |
| 875 | Koko Eating Bananas | (media) | [OK] | Binary search on answer con función monotónica |
| 153 | Find Minimum in Rotated Sorted Array | (media) | [OK] | Comparar con nums[right] para localizar pivote |
| 33 | Search in Rotated Sorted Array | (media) | [OK] | “Una mitad siempre ordenada” + árbol de 4 ramas |
| 981 | Time Based Key-Value Store | (media) | [OK] | Diseño de clase + bisect_right para “último ≤ x” |
| 4 | Median of Two Sorted Arrays | (dificil) | [OK] | Binary search sobre partición (el más difícil) |
06. Linked List — [OK] COMPLETO
Idea central del patrón: manipulación de punteros (
prev,curr,next) y dos punteros (slow / fast) para detectar ciclos, encontrar mitad, etc.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 206 | Reverse Linked List | (facil) | [OK] C++ | 3 punteros (prev/curr/next) — sub-rutina central |
| 21 | Merge Two Sorted Lists | (facil) | [OK] | Dummy node + tail pointer |
| 141 | Linked List Cycle | (facil) | [OK] | Floyd’s tortoise & hare (slow/fast) |
| 143 | Reorder List | (media) | [OK] | Composición: mid + reverse + merge alternado |
| 19 | Remove Nth Node From End | (media) | [OK] | Two pointers con offset n+1 |
| 138 | Copy List with Random Pointer | (media) | [OK] | Hash map old→new para deep copy |
| 2 | Add Two Numbers | (media) | [OK] | Suma con carry + dummy + while l1 or l2 or carry |
| 287 | Find the Duplicate Number | (media) | [OK] | Floyd sobre array (array como linked list virtual) |
| 146 | LRU Cache | (media) | [OK] | Doubly linked list + hash map; get/put en O(1) |
| 23 | Merge K Sorted Lists | (dificil) | [OK] | Min-heap o divide-and-conquer; O(n log k) |
| 25 | Reverse Nodes in K-Group | (dificil) | [OK] | Reverse en bloques con localización + reconexión |
07. Trees — [OK] COMPLETO
Idea central del patrón: recursión sobre estructura jerárquica. DFS (preorder, inorder, postorder), BFS (level order), invariantes de BST. Núcleo de entrevistas.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 226 | Invert Binary Tree | (facil) | [OK] C++ | Recursión simple, swap pythonic |
| 104 | Maximum Depth of Binary Tree | (facil) | [OK] | 1 + max(left, right) postorder |
| 543 | Diameter of Binary Tree | (facil) | [OK] | Recursión + tracker global (patrón maestro) |
| 110 | Balanced Binary Tree | (facil) | [OK] | Valor centinela -1 para señalizar |
| 100 | Same Tree | (facil) | [OK] | Recursión paralela sobre 2 árboles |
| 572 | Subtree of Another Tree | (facil) | [OK] | Doble recursión: search + verify |
| 235 | Lowest Common Ancestor of a BST | (media) | [OK] | Aprovechar propiedad BST O(log n) |
| 102 | Binary Tree Level Order Traversal | (media) | [OK] | BFS con deque, snapshot de tamaño por nivel |
| 199 | Binary Tree Right Side View | (media) | [OK] | BFS + último de cada nivel |
| 1448 | Count Good Nodes in Binary Tree | (media) | [OK] | DFS con acumulador top-down |
| 98 | Validate Binary Search Tree | (media) | [OK] | DFS con bounds (lower, upper) top-down |
| 230 | Kth Smallest Element in a BST | (media) | [OK] | Inorder iterativo con stack |
| 105 | Construct Binary Tree from Preorder and Inorder | (media) | [OK] | Reconstrucción con índices + hash de inorder |
| 124 | Binary Tree Maximum Path Sum | (dificil) | [OK] | Generalización de 543 con negativos (max(., 0)) |
| 297 | Serialize and Deserialize Binary Tree | (dificil) | [OK] | Preorder + N como marcador de None |
08. Tries — [OK] COMPLETO
Idea central del patrón: árbol de prefijos para búsquedas de string eficientes. Autocompletado, validación de palabras, búsqueda con wildcards.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 208 | Implement Trie - Prefix Tree | (media) | [OK] | Estructura básica con dict de hijos + is_end |
| 211 | Design Add and Search Words | (media) | [OK] | Trie + DFS para wildcards '.' |
| 212 | Word Search II | (dificil) | [OK] | Trie + backtracking en grid |
09. Heap / Priority Queue — [OK] COMPLETO
Idea central del patrón: estructura ordenada por prioridad con O(log n) inserción/extracción del mínimo (o máximo). Top-K, scheduling, mediana en stream.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 703 | Kth Largest in Stream | (facil) | [OK] | Min-heap de tamaño k en streaming |
| 1046 | Last Stone Weight | (facil) | [OK] | Max-heap simulado con negación |
| 973 | K Closest Points to Origin | (media) | [OK] | Max-heap top-K + saltar sqrt |
| 215 | Kth Largest Element in Array | (media) | [OK] | Sort vs heap vs quickselect O(n) |
| 621 | Task Scheduler | (media) | [OK] | Heap + queue de cooldown |
| 355 | Design Twitter | (media) | [OK] | Diseño con dict + heap |
| 295 | Find Median from Data Stream | (dificil) | [OK] | Two heaps (max-heap + min-heap) |
Ya tocaste heap brevemente en 347-top-k-frequent-elements; aquí se profundiza.
10. Backtracking — [OK] COMPLETO
Idea central del patrón: explorar todas las posibles combinaciones / permutaciones recursivamente, con poda cuando una rama no puede llevar a solución. DFS sobre espacio de estados.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 78 | Subsets | (media) | [OK] | “Incluir / no incluir” |
| 39 | Combination Sum | (media) | [OK] | Permitir repetir: i no i+1 |
| 46 | Permutations | (media) | [OK] | used[] flag |
| 90 | Subsets II | (media) | [OK] | Sort + skip dups (i > start) |
| 40 | Combination Sum II | (media) | [OK] | i+1 + skip dups combinados |
| 79 | Word Search | (media) | [OK] | DFS en grid + marcar/restaurar |
| 131 | Palindrome Partitioning | (media) | [OK] | Particionar string + check palíndromo |
| 17 | Letter Combinations of a Phone Number | (media) | [OK] | Producto cartesiano |
| 51 | N-Queens | (dificil) | [OK] | Múltiples constraints (cols, r+c, r-c) |
11. Graphs — [OK] COMPLETO
Idea central del patrón: BFS (niveles, distancia mínima) y DFS (conectividad, ciclos). Modelar matrices como grafos implícitos. Núcleo de entrevistas tecnicas.
| Problema | Estado | Idea distintiva | ||
|---|---|---|---|---|
| 200 | Number of Islands | (media) | [OK] | DFS en grid + componentes conexos |
| 133 | Clone Graph | (media) | [OK] | DFS + hash old→new |
| 695 | Max Area of Island | (media) | [OK] | DFS devolviendo área |
| 417 | Pacific Atlantic Water Flow | (media) | [OK] | DFS desde bordes (inverso) |
| 130 | Surrounded Regions | (media) | [OK] | DFS desde bordes + flip |
| 994 | Rotting Oranges | (media) | [OK] | Multi-source BFS con tiempo |
| 286 | Walls and Gates | (media) | [OK] | Multi-source BFS para distancias |
| 207 | Course Schedule | (media) | [OK] | DFS 3-colors o Kahn’s algorithm |
| 210 | Course Schedule II | (media) | [OK] | Topological sort completo |
| 684 | Redundant Connection | (media) | [OK] | Union-Find básico |
| 323 | Number of Connected Components | (media) | [OK] | DFS o UF para componentes |
| 261 | Graph Valid Tree | (media) | [OK] | UF + check n-1 aristas |
| 127 | Word Ladder | (dificil) | [OK] | BFS shortest path con patterns |
12. Advanced Graphs — Pendiente
Idea central del patrón: algoritmos clásicos sobre grafos ponderados: Dijkstra (camino más corto), Prim/Kruskal (árbol de coste mínimo), Bellman-Ford, topological sort.
| Problema | Estado | ||
|---|---|---|---|
| 1584 | Min Cost to Connect All Points | (media) | |
| 743 | Network Delay Time | (media) | |
| 787 | Cheapest Flights Within K Stops | (media) | |
| 332 | Reconstruct Itinerary | (dificil) | |
| 778 | Swim in Rising Water | (dificil) | |
| 269 | Alien Dictionary | (dificil) |
13. 1-D Dynamic Programming — Pendiente
Idea central del patrón: descomponer un problema en subproblemas óptimos con dependencia 1D (estado = un índice). El terror clásico que se domesticа con repetición.
| Problema | Estado | ||
|---|---|---|---|
| 70 | Climbing Stairs | (facil) | |
| 746 | Min Cost Climbing Stairs | (facil) | |
| 198 | House Robber | (media) | |
| 213 | House Robber II | (media) | |
| 5 | Longest Palindromic Substring | (media) | |
| 647 | Palindromic Substrings | (media) | |
| 91 | Decode Ways | (media) | |
| 322 | Coin Change | (media) | |
| 152 | Maximum Product Subarray | (media) | |
| 139 | Word Break | (media) | |
| 300 | Longest Increasing Subsequence | (media) | |
| 416 | Partition Equal Subset Sum | (media) |
14. 2-D Dynamic Programming — Pendiente
Idea central del patrón: estado bidimensional (e.g. dos strings, dos índices). Las cumbres más altas del DP. Edit distance, knapsack, longest common subsequence.
| Problema | Estado | ||
|---|---|---|---|
| 62 | Unique Paths | (media) | |
| 1143 | Longest Common Subsequence | (media) | |
| 309 | Best Time to Buy and Sell Stock with Cooldown | (media) | |
| 518 | Coin Change II | (media) | |
| 494 | Target Sum | (media) | |
| 97 | Interleaving String | (media) | |
| 72 | Edit Distance | (media) | |
| 329 | Longest Increasing Path in a Matrix | (dificil) | |
| 115 | Distinct Subsequences | (dificil) | |
| 312 | Burst Balloons | (dificil) | |
| 10 | Regular Expression Matching | (dificil) |
15. Greedy — Pendiente
Idea central del patrón: tomar la decisión localmente óptima en cada paso. Simple cuando funciona; demostrar que funciona es lo difícil.
| Problema | Estado | ||
|---|---|---|---|
| 53 | Maximum Subarray | (media) | |
| 55 | Jump Game | (media) | |
| 45 | Jump Game II | (media) | |
| 134 | Gas Station | (media) | |
| 846 | Hand of Straights | (media) | |
| 1899 | Merge Triplets to Form Target Triplet | (media) | |
| 763 | Partition Labels | (media) | |
| 678 | Valid Parenthesis String | (media) |
16. Intervals — Pendiente
Idea central del patrón: ordenar intervalos por extremo (inicio o fin) y procesarlos linealmente. Solapamientos, fusiones, conflicts.
| Problema | Estado | ||
|---|---|---|---|
| 252 | Meeting Rooms | (facil) | |
| 56 | Merge Intervals | (media) | |
| 57 | Insert Interval | (media) | |
| 435 | Non-overlapping Intervals | (media) | |
| 253 | Meeting Rooms II | (media) | |
| 1851 | Minimum Interval to Include Each Query | (dificil) |
17. Math & Geometry — Pendiente
Idea central del patrón: manipulación de matrices (rotación, espirales), aritmética de enteros grandes, geometría plana básica.
| Problema | Estado | ||
|---|---|---|---|
| 202 | Happy Number | (facil) | |
| 66 | Plus One | (facil) | |
| 48 | Rotate Image | (media) | |
| 54 | Spiral Matrix | (media) | |
| 73 | Set Matrix Zeroes | (media) | |
| 50 | Pow(x, n) | (media) | |
| 43 | Multiply Strings | (media) | |
| 2013 | Detect Squares | (media) |
18. Bit Manipulation — Pendiente
Idea central del patrón: operaciones a nivel de bits (AND, OR, XOR, shifts). Útil cuando el dominio está acotado por el ancho de un entero (32 o 64 bits). Si vienes de hardware/embebido, este patrón te resultará familiar — XOR para diferencias, máscaras de bits, etc. son lenguaje habitual de firmware C.
| Problema | Estado | ||
|---|---|---|---|
| 136 | Single Number | (facil) | |
| 191 | Number of 1 Bits | (facil) | |
| 338 | Counting Bits | (facil) | |
| 190 | Reverse Bits | (facil) | |
| 268 | Missing Number | (facil) | |
| 371 | Sum of Two Integers | (media) | |
| 7 | Reverse Integer | (media) |
Cómo trabajar con este índice
- Punto de entrada único: cuando vayas a estudiar, abres este MOC y eliges un problema.
- Wikilinks activos [OK] → archivo creado con el formato worked-example. Click directo.
- Pendientes → cuando estés listo para empezar uno nuevo, dímelo y lo redacto en el momento (o en lote por patrón completo, como hicimos con Arrays & Hashing).
- Estado en cada archivo: la sección “Estado de progreso personal” al final de cada nota tiene checkboxes para tu seguimiento (leído / escrito desde cero / submitted en LeetCode / repaso semanal).
- Actualización del MOC: cuando completemos un nuevo problema, actualizo la tabla de progreso global y marco el [OK] en su patrón.
Orden recomendado de patrones
El orden numérico (1 → 18) no es arbitrario: cada patrón presupone los anteriores. Recomendación de progresión:
Fase 1 — Fundamentos : 01 Arrays & Hashing → 02 Two Pointers → 03 Sliding Window
Fase 2 — Estructuras : 04 Stack → 06 Linked List → 09 Heap
Fase 3 — Búsqueda : 05 Binary Search
Fase 4 — Recursión / DFS : 07 Trees → 08 Tries → 10 Backtracking
Fase 5 — Grafos : 11 Graphs → 12 Advanced Graphs
Fase 6 — DP : 13 1-D DP → 14 2-D DP
Fase 7 — Cierre : 15 Greedy + 16 Intervals + 17 Math & Geometry + 18 Bit Manipulation
Cadencia sostenible: 3-5 problemas por semana → 30-50 semanas para completar los 150 (~7-12 meses). Constancia > intensidad.
Recursos externos
- neetcode.io/roadmap — roadmap visual oficial con los 150.
- neetcode.io/practice — playlist de videos con explicación de cada problema (todos gratis).
- LeetCode oficial — plataforma para someter soluciones (cuenta gratis suficiente).
- Blind 75 — lista anterior, subset de NeetCode 150 (los marcados con son aproximadamente Blind 75).
Conexiones
- MOC_Programacion — área padre.
- Memoria asociada:
feedback_learning_style_algorithmic.md(worked-example primero, no socrático para CS clásica).
Consulta Dataview (problemas resueltos por dificultad)
La consulta solo funciona si tienes el plugin Dataview instalado en Obsidian. Si no, ignórala — el MOC funciona igualmente.