Trouver un point bitonique dans une séquence bitonique donnée

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)

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++
   // 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  (  '%d  n  '       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++
   // 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  (  '%d  n  '       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
500 
Créer un quiz