Menu
CoddyTech

Find Minimum in Rotated Sorted Array

Une liste d’entiers distincts a été triée par ordre croissant, puis pivotée : un certain nombre d’éléments, éventuellement zéro, ont été pris au début et déplacés à la fin dans le même ordre. Par exemple, [2, 5, 9, 11, 13, 15, 17] pivotée de 3 positions devient [11, 13, 15, 17, 2, 5, 9]. On vous donne la liste pivotée nums. Renvoyez sa plus petite valeur en O(log n) temps.

Fonction

findMin(nums: integer-array) → integer
numsinteger-array
la liste triée par rotation d’entiers distincts
Renvoieinteger
la plus petite valeur dans nums

Contraintes

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i] ≤ 104
  • Toutes les valeurs de nums sont distinctes.
  • nums est une liste croissante pivotée d’un certain k, avec 0 ≤ k < nums.length ; k = 0 signifie qu’elle n’est pas pivotée.

Exemples

Entrée
nums = [11, 13, 15, 17, 2, 5, 9]
Sortie
2
Explication
Les valeurs montent de 11 à 17, puis chutent à 2, où commence la deuxième séquence. La recherche constate que 17 > 9 à l’index 3, donc le minimum se trouve à sa droite ; puis 5 ≤ 9 et 2 ≤ 5 font reculer hi jusqu’à ce que la plage se réduise au seul index 4, qui contient 2.

lock icon+17 tests cachés à la soumission

challenge icon

Pour aller plus loin

Peux-tu renvoyer la k-ième plus petite valeur de nums en O(log n) temps, sans la trier ?

Réinitialiser le code
def findMin(nums):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

2