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ónTotal[OK] HechoPendiente%
01. Arrays & Hashing990100%
02. Two Pointers550100%
03. Sliding Window660100%
04. Stack770100%
05. Binary Search770100%
06. Linked List11110100%
07. Trees15150100%
08. Tries330100%
09. Heap / Priority Queue770100%
10. Backtracking990100%
11. Graphs13130100%
12. Advanced Graphs660100%
13. 1-D Dynamic Programming12120100%
14. 2-D Dynamic Programming11110100%
15. Greedy880100%
16. Intervals660100%
17. Math & Geometry880100%
18. Bit Manipulation770100%
TOTAL1501500100% [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 .cpp hermano 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 con C++ en las tablas. Conecta con (Build_Things/10_cpp_learning/).


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).

ProblemaEstadoIdea distintiva
217Contains Duplicate(facil)[OK] C++“He visto X antes”
242Valid Anagram(facil)[OK]Frecuencias con dict / Counter / array 26
1Two Sum(facil)[OK] C++“He visto el complemento de X”
49Group Anagrams(media)[OK] C++Clave canónica + defaultdict(list)
347Top K Frequent Elements(media)[OK]Counter + heap O(n log k), bucket sort O(n)
271Encode and Decode Strings(media)[OK]Length-prefix encoding (≈ tu protocolo embebido)
238Product of Array Except Self(media)[OK]Prefix * Suffix products in-place O(1)
36Valid Sudoku(media)[OK]Set con claves compuestas (múltiples restricciones)
128Longest 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.

ProblemaEstadoIdea distintiva
125Valid Palindrome(facil)[OK] C++Two pointers convergentes con skip de no-alfanuméricos
167Two Sum II - Input Array Is Sorted(media)[OK]Monotonía del orden permite descartar 1 candidato por iter
153Sum(media)[OK] C++Sort + fix one + two pointers (reducción de 3-Sum a 2-Sum)
11Container With Most Water(media)[OK]Greedy local: mover el menor (argumento de descarte)
42Trapping 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.

ProblemaEstadoIdea distintiva
121Best Time to Buy and Sell Stock(facil)[OK] C++Tracking de mínimo histórico (one-pass)
3Longest Substring Without Repeating Characters(media)[OK]Sliding window variable con set / dict de índices
424Longest Repeating Character Replacement(media)[OK]Sliding window con tolerancia (len - max_freq <= k)
567Permutation in String(media)[OK]Sliding window de tamaño FIJO + match de frecuencias
76Minimum Window Substring(dificil)[OK]Sliding window con cobertura (have / need)
239Sliding 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).

ProblemaEstadoIdea distintiva
20Valid Parentheses(facil)[OK] C++LIFO para emparejar delimitadores
155Min Stack(media)[OK]Diseño de clase: stack auxiliar para min en O(1)
150Evaluate Reverse Polish Notation(media)[OK]Stack para evaluar expresiones (RPN)
22Generate Parentheses(media)[OK]Backtracking con poda; intro al patrón 10
739Daily Temperatures(media)[OK]Stack monotónico decreciente (“próximo mayor”)
853Car Fleet(media)[OK]Sort + stack con tracking de ETA
84Largest 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.

ProblemaEstadoIdea distintiva
704Binary Search(facil)[OK] C++Template clásico; las 4 trampas (overflow, <=, +1/-1, <)
74Search a 2D Matrix(media)[OK]Matriz como 1D virtual; divmod(mid, n)
875Koko Eating Bananas(media)[OK]Binary search on answer con función monotónica
153Find Minimum in Rotated Sorted Array(media)[OK]Comparar con nums[right] para localizar pivote
33Search in Rotated Sorted Array(media)[OK]“Una mitad siempre ordenada” + árbol de 4 ramas
981Time Based Key-Value Store(media)[OK]Diseño de clase + bisect_right para “último ≤ x”
4Median 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.

ProblemaEstadoIdea distintiva
206Reverse Linked List(facil)[OK] C++3 punteros (prev/curr/next) — sub-rutina central
21Merge Two Sorted Lists(facil)[OK]Dummy node + tail pointer
141Linked List Cycle(facil)[OK]Floyd’s tortoise & hare (slow/fast)
143Reorder List(media)[OK]Composición: mid + reverse + merge alternado
19Remove Nth Node From End(media)[OK]Two pointers con offset n+1
138Copy List with Random Pointer(media)[OK]Hash map old→new para deep copy
2Add Two Numbers(media)[OK]Suma con carry + dummy + while l1 or l2 or carry
287Find the Duplicate Number(media)[OK]Floyd sobre array (array como linked list virtual)
146LRU Cache(media)[OK]Doubly linked list + hash map; get/put en O(1)
23Merge K Sorted Lists(dificil)[OK]Min-heap o divide-and-conquer; O(n log k)
25Reverse 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.

ProblemaEstadoIdea distintiva
226Invert Binary Tree(facil)[OK] C++Recursión simple, swap pythonic
104Maximum Depth of Binary Tree(facil)[OK]1 + max(left, right) postorder
543Diameter of Binary Tree(facil)[OK]Recursión + tracker global (patrón maestro)
110Balanced Binary Tree(facil)[OK]Valor centinela -1 para señalizar
100Same Tree(facil)[OK]Recursión paralela sobre 2 árboles
572Subtree of Another Tree(facil)[OK]Doble recursión: search + verify
235Lowest Common Ancestor of a BST(media)[OK]Aprovechar propiedad BST O(log n)
102Binary Tree Level Order Traversal(media)[OK]BFS con deque, snapshot de tamaño por nivel
199Binary Tree Right Side View(media)[OK]BFS + último de cada nivel
1448Count Good Nodes in Binary Tree(media)[OK]DFS con acumulador top-down
98Validate Binary Search Tree(media)[OK]DFS con bounds (lower, upper) top-down
230Kth Smallest Element in a BST(media)[OK]Inorder iterativo con stack
105Construct Binary Tree from Preorder and Inorder(media)[OK]Reconstrucción con índices + hash de inorder
124Binary Tree Maximum Path Sum(dificil)[OK]Generalización de 543 con negativos (max(., 0))
297Serialize 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.

ProblemaEstadoIdea distintiva
208Implement Trie - Prefix Tree(media)[OK]Estructura básica con dict de hijos + is_end
211Design Add and Search Words(media)[OK]Trie + DFS para wildcards '.'
212Word 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.

ProblemaEstadoIdea distintiva
703Kth Largest in Stream(facil)[OK]Min-heap de tamaño k en streaming
1046Last Stone Weight(facil)[OK]Max-heap simulado con negación
973K Closest Points to Origin(media)[OK]Max-heap top-K + saltar sqrt
215Kth Largest Element in Array(media)[OK]Sort vs heap vs quickselect O(n)
621Task Scheduler(media)[OK]Heap + queue de cooldown
355Design Twitter(media)[OK]Diseño con dict + heap
295Find 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.

ProblemaEstadoIdea distintiva
78Subsets(media)[OK]“Incluir / no incluir”
39Combination Sum(media)[OK]Permitir repetir: i no i+1
46Permutations(media)[OK]used[] flag
90Subsets II(media)[OK]Sort + skip dups (i > start)
40Combination Sum II(media)[OK]i+1 + skip dups combinados
79Word Search(media)[OK]DFS en grid + marcar/restaurar
131Palindrome Partitioning(media)[OK]Particionar string + check palíndromo
17Letter Combinations of a Phone Number(media)[OK]Producto cartesiano
51N-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.

ProblemaEstadoIdea distintiva
200Number of Islands(media)[OK]DFS en grid + componentes conexos
133Clone Graph(media)[OK]DFS + hash old→new
695Max Area of Island(media)[OK]DFS devolviendo área
417Pacific Atlantic Water Flow(media)[OK]DFS desde bordes (inverso)
130Surrounded Regions(media)[OK]DFS desde bordes + flip
994Rotting Oranges(media)[OK]Multi-source BFS con tiempo
286Walls and Gates(media)[OK]Multi-source BFS para distancias
207Course Schedule(media)[OK]DFS 3-colors o Kahn’s algorithm
210Course Schedule II(media)[OK]Topological sort completo
684Redundant Connection(media)[OK]Union-Find básico
323Number of Connected Components(media)[OK]DFS o UF para componentes
261Graph Valid Tree(media)[OK]UF + check n-1 aristas
127Word 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.

ProblemaEstado
1584Min Cost to Connect All Points(media)
743Network Delay Time(media)
787Cheapest Flights Within K Stops(media)
332Reconstruct Itinerary(dificil)
778Swim in Rising Water(dificil)
269Alien 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.

ProblemaEstado
70Climbing Stairs(facil)
746Min Cost Climbing Stairs(facil)
198House Robber(media)
213House Robber II(media)
5Longest Palindromic Substring(media)
647Palindromic Substrings(media)
91Decode Ways(media)
322Coin Change(media)
152Maximum Product Subarray(media)
139Word Break(media)
300Longest Increasing Subsequence(media)
416Partition 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.

ProblemaEstado
62Unique Paths(media)
1143Longest Common Subsequence(media)
309Best Time to Buy and Sell Stock with Cooldown(media)
518Coin Change II(media)
494Target Sum(media)
97Interleaving String(media)
72Edit Distance(media)
329Longest Increasing Path in a Matrix(dificil)
115Distinct Subsequences(dificil)
312Burst Balloons(dificil)
10Regular 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.

ProblemaEstado
53Maximum Subarray(media)
55Jump Game(media)
45Jump Game II(media)
134Gas Station(media)
846Hand of Straights(media)
1899Merge Triplets to Form Target Triplet(media)
763Partition Labels(media)
678Valid Parenthesis String(media)

16. Intervals — Pendiente

Idea central del patrón: ordenar intervalos por extremo (inicio o fin) y procesarlos linealmente. Solapamientos, fusiones, conflicts.

ProblemaEstado
252Meeting Rooms(facil)
56Merge Intervals(media)
57Insert Interval(media)
435Non-overlapping Intervals(media)
253Meeting Rooms II(media)
1851Minimum 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.

ProblemaEstado
202Happy Number(facil)
66Plus One(facil)
48Rotate Image(media)
54Spiral Matrix(media)
73Set Matrix Zeroes(media)
50Pow(x, n)(media)
43Multiply Strings(media)
2013Detect 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.

ProblemaEstado
136Single Number(facil)
191Number of 1 Bits(facil)
338Counting Bits(facil)
190Reverse Bits(facil)
268Missing Number(facil)
371Sum of Two Integers(media)
7Reverse Integer(media)

Cómo trabajar con este índice

  1. Punto de entrada único: cuando vayas a estudiar, abres este MOC y eliges un problema.
  2. Wikilinks activos [OK] → archivo creado con el formato worked-example. Click directo.
  3. 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).
  4. 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).
  5. 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.