On vous donne un Séquence bitonique la tâche est de trouver Point bitonique dedans. Une séquence bitonique est une séquence de nombres qui est d'abord strictement croissant puis après un point strictement décroissant .
Un point bitonique est un point d'une séquence bitonique avant lequel les éléments sont strictement croissants et après lequel les éléments sont strictement décroissants.
Remarque : - La séquence donnée sera toujours une séquence bitonique valide.
Exemples :
Saisir: arr[] = {8 10 100 200 400 500 3 2 1}
Sortir : 500
Saisir: arr[] = {10 20 30 40 30 20}
Sortir : 40
Saisir :arr[] = {60 70 120 100 80}
Sortir: 120
Table des matières
- [Approche naïve] Utilisation de la recherche linéaire - Temps O(n) et Espace O(1)
- [Approche attendue] Utilisation de la recherche binaire - Temps O(logn) et Espace O(1)
[Approche naïve] Utilisation de la recherche linéaire - Temps O(n) et Espace O(1)
C++Une approche simple consiste à parcourir le tableau et à suivre les maximum élément s’est produit jusqu’à présent. une fois le parcours terminé, renvoie l'élément maximum.
// C++ program to find maximum element in bitonic // array using linear search #include #include using namespace std; int bitonicPoint(vector<int> &arr) { int res = arr[0]; // Traverse the array to find // the maximum element for (int i = 1; i < arr.size(); i++) res = max(res arr[i]); return res; } int main() { vector<int> arr = {8 10 100 400 500 3 2 1}; cout << bitonicPoint(arr); return 0; }
C // C program to find maximum element in bitonic // array using linear search #include int bitonicPoint(int arr[] int n) { int res = arr[0]; // Traverse the array to find // the maximum element for (int i = 1; i < n; i++) res = (res > arr[i]) ? res : arr[i]; return res; } int main() { int arr[] = {8 10 100 400 500 3 2 1}; int n = sizeof(arr) / sizeof(arr[0]); printf('%dn' bitonicPoint(arr n)); return 0; }
Java // Java program to find maximum element in bitonic // array using linear search import java.util.Arrays; class GfG { static int bitonicPoint(int[] arr) { int res = arr[0]; // Traverse the array to find // the maximum element for (int i = 1; i < arr.length; i++) res = Math.max(res arr[i]); return res; } public static void main(String[] args) { int[] arr = {8 10 100 400 500 3 2 1}; System.out.println(bitonicPoint(arr)); } }
Python # Python program to find maximum element in # bitonic array using linear search def bitonicPoint(arr): res = arr[0] # Traverse the array to find # the maximum element for i in range(1 len(arr)): res = max(res arr[i]) return res if __name__ == '__main__': arr = [8 10 100 400 500 3 2 1] print(bitonicPoint(arr))
C# // C# program to find maximum element in bitonic // array using linear search using System; class GfG { static int bitonicPoint(int[] arr) { int res = arr[0]; // Traverse the array to find // the maximum element for (int i = 1; i < arr.Length; i++) res = Math.Max(res arr[i]); return res; } static void Main() { int[] arr = {8 10 100 400 500 3 2 1}; Console.WriteLine(bitonicPoint(arr)); } }
JavaScript // JavaScript program to find maximum element in // bitonic array using linear search function bitonicPoint(arr) { let res = arr[0]; // Traverse the array to find // the maximum element for (let i = 1; i < arr.length; i++) res = Math.max(res arr[i]); return res; } const arr = [8 10 100 400 500 3 2 1]; console.log(bitonicPoint(arr));
Sortir
500
[Approche attendue] Utilisation de la recherche binaire - Temps O(logn) et Espace O(1)
Le tableau d'entrée suit un motif monotone . Si un élément est plus petit que le suivant, il se trouve dans le i segment croissant du tableau et l'élément maximum existera certainement après lui. A l’inverse si un élément est plus grand que le suivant, il se trouve dans le segment décroissant ce qui signifie que le maximum est soit à cette position, soit plus tôt. On peut donc utiliser recherche binaire pour trouver efficacement le maximum d'éléments dans le tableau.
// C++ program to find the maximum element in a bitonic // array using binary search. #include #include using namespace std; int bitonicPoint(vector<int> &arr) { int n = arr.size(); // Search space for binary search. int lo = 0 hi = n - 1; int res = n - 1; while(lo <= hi) { int mid = (lo + hi) / 2; // Decreasing segment if(mid + 1 < n && arr[mid] > arr[mid + 1]) { res = mid; hi = mid - 1; } // Increasing segment else { lo = mid + 1; } } return arr[res]; } int main() { vector<int> arr = {8 10 100 400 500 3 2 1}; cout << bitonicPoint(arr); return 0; }
C // C program to find the maximum element in a bitonic // array using binary search. #include int bitonicPoint(int arr[] int n) { // Search space for binary search. int lo = 0 hi = n - 1; int res = hi; while(lo <= hi) { int mid = (lo + hi) / 2; // Decreasing segment if(mid + 1 < n && arr[mid] > arr[mid + 1]) { res = mid; hi = mid - 1; } // Increasing segment else { lo = mid + 1; } } return arr[res]; } int main() { int arr[] = {8 10 100 400 500 3 2 1}; int n = sizeof(arr) / sizeof(arr[0]); printf('%dn' bitonicPoint(arr n)); return 0; }
Java // Java program to find the maximum element in a bitonic // array using binary search. import java.util.Arrays; class GfG { static int bitonicPoint(int[] arr) { int n = arr.length; // Search space for binary search. int lo = 0 hi = n - 1; int res = n - 1; while (lo <= hi) { int mid = (lo + hi) / 2; // Decreasing segment if (mid + 1 < n && arr[mid] > arr[mid + 1]) { res = mid; hi = mid - 1; } // Increasing segment else { lo = mid + 1; } } return arr[res]; } public static void main(String[] args) { int[] arr = {8 10 100 400 500 3 2 1}; System.out.println(bitonicPoint(arr)); } }
Python # Python program to find the maximum element in a bitonic # array using binary search. def bitonicPoint(arr): # Search space for binary search. lo = 0 hi = len(arr) - 1 res = hi while lo <= hi: mid = (lo + hi) // 2 # Decreasing segment if mid + 1 < len(arr) and arr[mid] > arr[mid + 1]: res = mid hi = mid - 1 # Increasing segment else: lo = mid + 1 return arr[res] if __name__ == '__main__': arr = [8 10 100 400 500 3 2 1] print(bitonicPoint(arr))
C# // C# program to find the maximum element in a bitonic // array using binary search. using System; class GfG { static int bitonicPoint(int[] arr) { int n = arr.Length; // Search space for binary search. int lo = 0 hi = n - 1; int res = n - 1; while (lo <= hi) { int mid = (lo + hi) / 2; // Decreasing segment if (mid + 1 < n && arr[mid] > arr[mid + 1]) { res = mid; hi = mid - 1; } // Increasing segment else { lo = mid + 1; } } return arr[res]; } static void Main() { int[] arr = {8 10 100 400 500 3 2 1}; Console.WriteLine(bitonicPoint(arr)); } }
JavaScript // JavaScript program to find the maximum element in a bitonic // array using binary search. function bitonicPoint(arr) { const n = arr.length; // Search space for binary search. let lo = 0 hi = n - 1; let res = n - 1; while (lo <= hi) { let mid = Math.floor((lo + hi) / 2); // Decreasing segment if (mid + 1 < n && arr[mid] > arr[mid + 1]) { res = mid; hi = mid - 1; } // Increasing segment else { lo = mid + 1; } } return arr[res]; } const arr = [8 10 100 400 500 3 2 1]; console.log(bitonicPoint(arr));
Sortir
500Créer un quiz