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 ne s’y trouve 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 pivotée d'un certain k avec 0 ≤ k < nums.length ; k = 0 la laisse non pivotée.

Exemples

Entrée
nums = [15, 19, 23, 2, 5, 8, 11]target = 5
Sortie
4
Explication
5 se trouve à l’indice 4. Le premier milieu, l’indice 3, contient 2, donc la moitié droite [2, 5, 8, 11] est triée, et 5 se trouve entre 2 et 11. Le milieu suivant, l’indice 5, contient 8 ; la partie gauche triée [5, 8] contient 5, ce qui mène à l’indice 4.

lock icon+23 tests cachés à la soumission

challenge icon

Pour aller plus loin

Si nums peut contenir des doublons, aucun algorithme ne peut garantir O(log n). Peux-tu le démontrer ? Construis une liste pivotée de 1 avec un seul 0 caché dedans, où toute recherche de 0 doit lire chaque élément.

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

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

4