pendant que je résolvais la question sur leetcode qui dit dans un tableau donné de nombres entiers triés par ordre non décroissant, trouvez la position de début et de fin d'une valeur cible donnée. il était donc impossible de renvoyer le début et la fin d'un élément cible dans un tableau avec un simple scarch binaire car il ne renvoie que l'index où il a trouvé le premier élément cible qui peut être n'importe quoi en premier, à la fin ou au milieu de cet élément. nous utilisons donc Double Binary Scarch , et voici comment procéder ...
Première recherche binaire :
Deuxième recherche binaire :
Résultat du retour :
Complexité temporelle :
Complexité spatiale :
class Solution { public int[] searchRange(int[] nums, int target) { int ei = nums.length - 1; int si = 0; int[] res = {-1, -1}; // Initialize result array // First binary search to find the last occurrence while (si nums[mid]) { si = mid 1; } else { res[1] = mid; // Update end index si = mid 1; // Search in the right half } } // Reset the pointers for the second binary search si = 0; ei = nums.length - 1; // Second binary search to find the first occurrence while (si nums[mid]) { si = mid 1; } else { res[0] = mid; // Update start index ei = mid - 1; // Search in the left half } } return res; // Return the result array } }
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3