Menu
CoddyTech

Find Minimum in Rotated Sorted Array

Un elenco di numeri 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, 9, 11, 13, 15, 17] ruotato di 3 diventa [11, 13, 15, 17, 2, 5, 9]. Ti viene dato l'elenco ruotato nums. Restituisci il suo valore più piccolo in tempo O(log n).

Funzione

findMin(nums: integer-array) → integer
numsinteger-array
l'elenco ordinato e ruotato di numeri interi distinti
Restituisceinteger
il valore più piccolo in nums

Vincoli

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i] ≤ 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 = [11, 13, 15, 17, 2, 5, 9]
Output
2
Spiegazione
I valori salgono da 11 a 17 e poi scendono a 2, dove inizia la seconda sequenza. La ricerca vede 17 > 9 all'indice 3, quindi il minimo si trova alla sua destra; poi 5 ≤ 9 e 2 ≤ 5 fanno arretrare hi finché l'intervallo non contiene solo l'indice 4, che contiene 2.

lock icon+17 test nascosti all’invio

challenge icon

Per approfondire

Riesci a restituire il k-esimo valore più piccolo di nums in O(log n) senza ordinarlo?

Ripristina il codice
def findMin(nums):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

nums = [11, 13, 15, 17, 2, 5, 9]

Atteso

2