Menu
CoddyTech

Search 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, 8, 11, 15, 19, 23] pivotée de 4 devient [15, 19, 23, 2, 5, 8, 11]. On vous donne la liste pivotée nums et un entier target. Renvoyez l’indice de target dans nums, en commençant à compter à partir de 0, ou -1 s’il n’y figure pas, en temps O(log n).

Fonction

search(nums: integer-array, target: integer) → integer
numsinteger-array
la liste triée par rotation d’entiers distincts
targetinteger
la valeur à rechercher
Renvoieinteger
l’indice de target dans nums, ou -1 s’il est absent

Contraintes

  • 1 ≤ nums.length ≤ 5000
  • -104 ≤ nums[i], target ≤ 104
  • Toutes les valeurs de nums sont distinctes.
  • nums est une liste croissante décalée de k positions, avec 0 ≤ k < nums.length ; k = 0 la laisse inchangée.

Exemples

Entrée
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Sortie
4
Explication
Le premier élément du milieu, à l’index 3, contient 2 ; la moitié droite [2, 5, 8, 11] est triée et contient 5. L’élément suivant du milieu, à l’index 5, contient 8 ; la partie gauche triée [5, 8] contient 5, ce qui mène à l’index 4.
challenge icon

Pour aller plus loin

Si nums peut contenir des doublons, aucun algorithme ne peut garantir O(log n). Peux-tu le prouver avec une liste pivotée de 1 qui dissimule un seul 0 ?

Réinitialiser le code
def search(nums, target):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

4