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, [2, 5, 8, 11, 15, 19, 23] ruotato di 4 diventa [15, 19, 23, 2, 5, 8, 11]. Ti vengono dati 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, o -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
Il primo elemento centrale, indice 3, contiene 2, quindi la metà destra [2, 5, 8, 11] è ordinata e contiene 5. Il successivo elemento centrale, indice 5, contiene 8; la parte sinistra ordinata [5, 8] contiene 5, il che porta all’indice 4.
challenge icon

Per approfondire

Se nums può contenere duplicati, nessun algoritmo può garantire O(log n). Riesci a dimostrarlo con una lista ruotata di 1 che nasconde un singolo 0?

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

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

4