Menu
CoddyTech

Find First and Last Position of Element in Sorted Array

Vous recevez une liste d’entiers nums triée par ordre non décroissant, donc une valeur peut apparaître plusieurs fois, ainsi qu’un entier target. Renvoyez une liste de deux indices, comptés à partir de 0 : la première et la dernière position où target apparaît. Si target ne figure pas dans la liste, renvoyez [-1, -1]. Visez un temps d’exécution de O(log n).

Fonction

searchRange(nums: integer-array, target: integer) → integer-array
numsinteger-array
la liste triée d’entiers, qui peut contenir des valeurs répétées
targetinteger
la valeur à rechercher
Renvoieinteger-array
le premier et le dernier indice de target, ou [-1, -1] s’il est absent

Contraintes

  • 1 ≤ nums.length ≤ 104
  • -104 ≤ nums[i], target ≤ 104
  • nums est trié par ordre non décroissant.

Exemples

Entrée
nums = [3, 5, 5, 5, 8, 9, 9, 12]target = 5
Sortie
[1, 3]
Explication
Les trois copies de 5 se trouvent aux index 1, 2 et 3, donc la séquence commence à l’index 1 et se termine à l’index 3. L’index 0 contient 3 et l’index 4 contient 8, donc la séquence ne peut pas s’étendre davantage.
challenge icon

Pour aller plus loin

Si la même liste reçoit des milliers de requêtes pour différentes cibles, un seul parcours préalable peut-il rendre chaque requête plus rapide que O(log n) ?

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

Test #1

Test #2

Arguments

nums = [3, 5, 5, 5, 8, 9, 9, 12]
target = 5

Résultat attendu

[1, 3]