Menu
CoddyTech

Search in Rotated Sorted Array

Una lista de enteros distintos se ordenó en orden creciente y después se rotó: se tomaron algunos elementos del principio, posiblemente ninguno, y se movieron al final en el mismo orden. Por ejemplo, [2, 5, 8, 11, 15, 19, 23] rotada en 4 posiciones se convierte en [15, 19, 23, 2, 5, 8, 11]. Recibes la lista rotada nums y un entero target. Devuelve el índice de target en nums, contando desde 0, o -1 si no está, en tiempo O(log n).

Función

search(nums: integer-array, target: integer) → integer
numsinteger-array
la lista ordenada y rotada de enteros distintos
targetinteger
el valor que se debe buscar
Devuelveinteger
el índice de target en nums, o -1 si no está

Restricciones

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • Todos los valores de nums son distintos.
  • nums es una lista creciente rotada por algún k con 0 ≤ k < nums.length; k = 0 la deja sin rotar.

Ejemplos

Entrada
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Salida
4
Explicación
5 está en el índice 4. El primer elemento del medio, el índice 3, contiene 2, así que la mitad derecha [2, 5, 8, 11] es la que está ordenada, y 5 está entre 2 y 11. El siguiente elemento del medio, el índice 5, contiene 8; la parte izquierda ordenada [5, 8] contiene 5, lo que lleva al índice 4.

lock icon+23 pruebas ocultas al enviar

challenge icon

Para ir más allá

Si nums puede contener duplicados, ningún algoritmo puede garantizar O(log n). ¿Puedes demostrarlo? Construye una lista rotada de 1 con un único 0 oculto en ella, donde cualquier búsqueda de 0 tenga que leer todos los elementos.

Restablecer código
def search(nums, target):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

nums = [15, 19, 23, 2, 5, 8, 11]
target = 5

Esperado

4