-
Notifications
You must be signed in to change notification settings - Fork 0
Semana 6 Busqueda Binaria
Joel Alvarez edited this page Jul 13, 2026
·
2 revisions
Usar búsqueda binaria no solo para encontrar índices exactos, sino también para encontrar límites, pivotes y respuestas mínimas que cumplen una condición.
| Problema | Patrón | Función | Tests |
|---|---|---|---|
| Binary Search | Búsqueda exacta | binary_search |
3 |
| Search Insert Position | Lower bound | search_insert |
3 |
| Find First and Last Position | Lower bound doble | search_range |
3 |
| Search in Rotated Sorted Array | Mitad ordenada | search_rotated |
3 |
| Find Minimum in Rotated Sorted Array | Búsqueda de pivote | find_min_rotated |
3 |
| Koko Eating Bananas | Búsqueda sobre respuesta | min_eating_speed |
3 |
| Capacity To Ship Packages Within D Days | Búsqueda sobre respuesta | ship_within_days |
3 |
| Search a 2D Matrix | Matriz a arreglo virtual | search_matrix |
3 |
| Find Peak Element | Búsqueda sobre pendiente | find_peak_element |
3 |
| Arranging Coins | Búsqueda sobre respuesta | arrange_coins |
3 |
Se usa cuando el arreglo está ordenado y queremos saber si un valor existe.
Invariante:
- El objetivo, si existe, está dentro del rango actual.
- Si
nums[mid] < target, descartamos la mitad izquierda. - Si
nums[mid] > target, descartamos la mitad derecha.
Busca el primer índice cuyo valor es mayor o igual al objetivo.
Útil para:
- Posición de inserción.
- Primer valor que cumple una condición.
- Evitar ramas especiales cuando el valor no existe.
- Rango de ocurrencias usando
lower_boundyupper_bound.
En un arreglo ordenado y rotado, al menos una mitad alrededor de mid está ordenada.
Invariante:
- Detectar qué mitad está ordenada.
- Decidir si el objetivo pertenece a esa mitad.
- Descartar la mitad que no puede contener el objetivo.
Se usa cuando la respuesta está en un rango numérico y existe una condición monótona.
Ejemplos:
- Si una velocidad permite terminar a tiempo, toda velocidad mayor también.
- Si una capacidad permite enviar a tiempo, toda capacidad mayor también.
- Si una cantidad de filas completas cabe con
nmonedas, toda cantidad menor también.
Pasos:
- Definir el rango de respuestas posibles.
- Escribir una función
works(answer). - Usar búsqueda binaria para encontrar la mínima respuesta que funciona.
- Usar
right = len - 1en arreglos vacíos. - No avanzar
leftconmid + 1. - Mezclar rangos cerrados y semiabiertos.
- No probar objetivos ausentes.
- Definir mal la condición monótona.
- No hacer división redondeando hacia arriba en problemas de capacidad o velocidad.
- Olvidar usar enteros amplios al calcular productos o números triangulares.
cargo testResultado al cerrar el bloque:
326 passed; 0 failed
El siguiente bloque recomendado es:
- Recursión.
- Backtracking.
- Linked lists.
Primeros problemas sugeridos:
- Subsets.
- Permutations.
- Combination Sum.
- Generate Parentheses.
- Word Search.
- Reverse Linked List.