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 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 rotada y ordenada de números 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
El primer elemento central, índice 3, contiene 2, así que la mitad derecha [2, 5, 8, 11] está ordenada y contiene 5. El siguiente elemento central, índice 5, contiene 8; la parte izquierda ordenada [5, 8] contiene 5, lo que lleva al índice 4.
challenge icon

Para ir más allá

Si nums puede contener duplicados, ningún algoritmo puede garantizar O(log n). ¿Puedes demostrarlo con una lista rotada de 1 que oculta un único 0?

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

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

4