Menu
CoddyTech

Search in Rotated Sorted Array

Un elenco di interi distinti è stato ordinato in ordine crescente e poi ruotato: un certo numero di elementi, eventualmente zero, è stato preso dall’inizio e spostato alla fine nello stesso ordine. Per esempio, ruotando di 4 [2, 5, 8, 11, 15, 19, 23] si ottiene [15, 19, 23, 2, 5, 8, 11]. Ricevi l’elenco ruotato nums e un intero target. Restituisci l’indice di target in nums, contando da 0, oppure -1 se non è presente, in tempo O(log n).

Funzione

search(nums: integer-array, target: integer) → integer
numsinteger-array
l'elenco ruotato ordinato di numeri interi distinti
targetinteger
il valore da cercare
Restituisceinteger
l'indice di target in nums, oppure -1 se non è presente

Vincoli

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • Tutti i valori in nums sono distinti.
  • nums è una lista crescente ruotata di un certo k, con 0 ≤ k < nums.length; k = 0 la lascia non ruotata.

Esempi

Input
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Output
4
Spiegazione
5 si trova all'indice 4. Il primo elemento centrale, all'indice 3, contiene 2, quindi la metà destra [2, 5, 8, 11] è quella ordinata e 5 si trova tra 2 e 11. Il successivo elemento centrale, all'indice 5, contiene 8; la parte sinistra ordinata [5, 8] contiene 5, il che porta all'indice 4.

lock icon+23 test nascosti all’invio

challenge icon

Per approfondire

Se nums può contenere duplicati, nessun algoritmo può garantire O(log n). Riesci a dimostrarlo? Crea una lista ruotata di 1 con un singolo 0 nascosto al suo interno, in cui qualsiasi ricerca di 0 debba leggere ogni elemento.

Ripristina il codice
def search(nums, target):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

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

Atteso

4