Considérons un tableau trié, par exemple :
[1, 2, 3, 4, 5, 6]
Maintenant, si ce tableau subit une rotation à un certain pivot, disons à l'index 3, il deviendrait :
[4, 5, 6, 1, 2, 3]
Remarquez que le tableau est toujours trié, mais il est divisé en deux parties. Notre objectif est de rechercher efficacement une valeur cible dans de tels tableaux.
Pour effectuer une recherche dans un tableau trié avec rotation, nous devons :
class Solution { public static void main(String[] args) { int[] arr = {4, 5, 6, 1, 2, 3}; // Example of rotated sorted array int target = 5; // Searching for the target int result = search(arr, target); // Displaying the result System.out.println("Index of target: " result); } // Main search function to find the target in a rotated sorted array public static int search(int[] nums, int target) { // Step 1: Find the pivot int pivot = searchPivot(nums); // Step 2: If no pivot, perform regular binary search if (pivot == -1) { return binarySearch(nums, target, 0, nums.length - 1); } // Step 3: If the target is at the pivot, return the pivot index if (nums[pivot] == target) { return pivot; } // Step 4: Decide which half of the array to search if (target >= nums[0]) { return binarySearch(nums, target, 0, pivot - 1); // Search left side } else { return binarySearch(nums, target, pivot 1, nums.length - 1); // Search right side } } // Binary search helper function static int binarySearch(int[] arr, int target, int start, int end) { while (start arr[mid 1]) { return mid; } // Check if the pivot is before the mid if (mid > start && arr[mid]Explication du Code
recherche():
- Cette fonction est chargée de rechercher la cible dans le tableau trié pivoté.
- Tout d'abord, nous trouvons le pivot à l'aide de la fonction searchPivot().
- En fonction de la position du pivot, nous décidons ensuite dans quelle moitié du tableau rechercher en utilisant la recherche binaire.
binarySearch() :
- Un algorithme de recherche binaire standard pour trouver la cible dans un sous-tableau trié.
- Nous définissons les indices de début et de fin et réduisons progressivement l'espace de recherche.
searchPivot() :
- Cette fonction identifie le point pivot (l'endroit où le tableau tourne).
- Le pivot est l'index où l'ordre de tri est « rompu » (c'est-à-dire que le tableau passe d'une valeur supérieure à une valeur inférieure).
- Si aucun pivot n'est trouvé, cela signifie que le tableau n'a pas été pivoté et nous pouvons effectuer une recherche binaire régulière.
Comment fonctionne l'algorithme
Pour un tableau comme [4, 5, 6, 1, 2, 3] :
Cette méthode garantit que nous effectuons une recherche efficace, en atteignant une complexité temporelle de O(log n), similaire à une recherche binaire standard.
Les tableaux triés avec rotation sont une question d'entretien courante et un défi utile pour approfondir votre compréhension de la recherche binaire. En trouvant le pivot et en adaptant notre recherche binaire en conséquence, nous pouvons effectuer une recherche efficace dans le tableau en temps logarithmique.
Si vous avez trouvé cet article utile, n'hésitez pas à me contacter sur LinkedIn ou à partager vos réflexions dans les commentaires ! Bon codage !
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