Búsqueda en Arrays Rotados: Encontrar Entero en Lista Ordenada
Clase 27 de 35 • Curso de Algoritmos Avanzados: Patrones de Arrays y Strings
Contenido del curso
- 3

Patrón de Dos Apuntadores en Algoritmos de Lista
02:56 - 4

Verificación de Orden en Diccionario Alienígena
02:56 - 5

Ordenamiento de Palabras en Idiomas Alienígenas
12:05 - 6
Playground: Verifying Alien Dictionary
00:00 - 7

Ordenación de Palabras en Diccionario Alienígena
15:07 - 8

Combinar Listas Ordenadas en un Array Ascendente
02:11 - 9

Ordenamiento de Listas con Complejidad Óptima y Espacio Constante
11:44 - 10
Playground: Merge Two Sorted Lists
00:00 - 11

Intercalación de Listas Ordenadas en Python
09:04 - 12

Resolver el problema "Container with Most Water" en Python
01:18 - 13

Cálculo Óptimo de Área en Listas de Alturas
09:02 - 14
Playground: Container with Most Water
00:00 - 15

Implementación de solución de cálculo de área máxima en Java
15:42 - 16

Implementación de Trapping Rainwater en Complejidad Lineal
01:02 - 17
Retos de Algoritmos con Apuntadores en Python
02:44 - 18
Patrones de Dos Apuntadores: Soluciones a Problemas Comunes en Python
06:43
- 19

Patrón Ventana Deslizante para Análisis de Datos Secuenciales
02:33 - 20

Subcadena más larga sin caracteres repetidos: patrón ventana deslizante
01:51 - 21

Algoritmo de Ventana Deslizante para Subcadenas Únicas
11:05 - 22
Playground: Longest Substring Without Repeating Characters
00:00 - 23

Algoritmo Python para Substring más Largo Sin Repeticiones
14:16 - 24
Retos de Algoritmos: Dos Apuntadores y Subcadenas
01:50 - 25
Máximos 1s Consecutivos y Subcadenas sin Repeticiones
03:22
- 26

Algoritmo de búsqueda binaria en listas ordenadas
09:26 - 27

Búsqueda en Arrays Rotados: Encontrar Entero en Lista Ordenada
02:19 - 28

Búsqueda Binaria en Arreglos Rotados
04:59 - 29
Playground: Search in Rotated Arrays
00:00 - 30

Búsqueda en Arrays Rotados con C++
10:53 - 31

Búsqueda eficiente en matriz ordenada MxN
01:44 - 32

Búsqueda Binaria en Matrices 2D Ordenadas
06:33 - 33
Playground: Search 2D Array Matrix
00:00 - 34

Búsqueda Binaria en Matrices con Python
07:48
¿Qué es el problema "Search in Rotated Arrays"?
El problema "Search in Rotated Arrays" es un reto común en las entrevistas técnicas y desafíos de programación. Se trata de trabajar con una lista de enteros que está ordenada de manera ascendente, pero que ha sido rotada en un índice desconocido. Esta rotación da como resultado una lista en la que los números parece que están desordenados, aunque en realidad mantiene un patrón de orden. El objetivo del problema es encontrar un número dentro de esta lista rotada y, si no lo encontramos, debemos retornar -1.
¿Cómo se estructura el array rotado?
Cuando hablamos de un array rotado, nos referimos a una lista que originalmente está ordenada y que se ha modificado rotando sus elementos desde un punto de pivote. Por ejemplo, si tenemos la lista original [0, 1, 2, 4, 5, 6, 7], y esta rotara en el pivote 3, el resultado sería [4, 5, 6, 7, 0, 1, 2]. Este tipo de rotación conserva el orden relativo de los elementos dentro de sus nuevos segmentos.
- Lista Original:
[0, 1, 2, 4, 5, 6, 7] - Lista Rotada:
[4, 5, 6, 7, 0, 1, 2]
¿Cómo resolver el problema utilizando búsqueda binaria?
Aunque la lista rotada no parece estar ordenada a simple vista, se puede aplicar la técnica de búsqueda binaria debido a su estructura rotada. La búsqueda binaria es un algoritmo eficiente que se utiliza generalmente en listas ordenadas, lo que nos permite encontrar el índice de un elemento en un tiempo O(log n). Aquí se aprovecha el hecho de que una parte de la lista siempre estará ordenada.
Procedimiento de búsqueda binaria para arrays rotados
-
Identificación del segmento ordenado:
- Comparamos los elementos ubicados al inicio y al final de la lista para determinar cuál segmento está ordenado de manera ascendente.
-
Determinación del pivote:
- Utilizamos los índices medios para revisar si estamos en el segmento ordenado o en el segmento desordenado.
-
Comparación del objetivo:
- Buscamos el objetivo comparando en qué parte de la lista rotada se encuentra, revisando si está dentro de los límites del segmento ordenado.
-
Encuentra o retorna -1:
- Si el objetivo se encuentra en el segmento ordenado, ajustamos los índices para seguir buscando en ese segmento. Si no aparece en ninguno de los pasos, retornamos -1.
Ejemplo práctico
- Dada la lista rotada
[4, 5, 6, 7, 0, 1, 2], queremos buscar el número0.- Al aplicar búsqueda binaria y reconocer el segmento ordenado, rápidamente encontramos que el
0está en la posición 4.
- Al aplicar búsqueda binaria y reconocer el segmento ordenado, rápidamente encontramos que el
¿Qué hacer si el elemento no está en la lista?
Si tras aplicar el algoritmo de búsqueda binaria no encontramos el elemento que buscamos, la implementación debe retornar -1 para indicar que el elemento objetivo no se encuentra dentro del array rotado.
Este tipo de ejercicio es fundamental para quienes buscan practicar técnicas avanzadas de búsqueda y manipulación de datos en listas y arrays. ¡Así que anímate a intentarlo y a perfeccionar tus habilidades de programación!