Ilgiausias iš eilės 1 s dvejetainiu vaizdu

Duotas skaičius n Užduotis yra rasti ilgiausio iš eilės ilgį 1s seriją jos dvejetainiu vaizdu.
Pavyzdžiai:  

Įvestis: n = 14
Išvestis: 3
Paaiškinimas: Dvejetainis 14 vaizdas yra 111 0.

Įvestis: n = 222
Išvestis: 4
Paaiškinimas:  Dvejetainė 222 reprezentacija yra 110 1111 0.

Turinio lentelė

[Naivus požiūris] Iteratyvus laikas O(1) ir erdvė O(1)

C++
   #include          using     namespace     std  ;   int     maxConsecutiveOne  (  int     n     ){          int     count     =     0     ;      int     maxi     =     0     ;      // traverse and check if bit set increment the count      for     (  int     i     =     0     ;     i      <     32     ;     i  ++  ){      if     (  n     &     (  1      < <     i  )){      count  ++  ;      }     else     {      maxi     =     max     (  maxi          count  );      count     =     0     ;      }      }      return     maxi  ;   }   int     main  ()     {      int     n     =     14     ;      cout      < <     maxConsecutiveOne  (  n  )      < <  'n'  ;      return     0  ;   }   
Java
   public     class   GFG     {      static     int     maxConsecutiveOne  (  int     n  )     {      int     count     =     0  ;      int     maxi     =     0  ;      // traverse and check if bit set increment the count      for     (  int     i     =     0  ;     i      <     32  ;     i  ++  )     {      if     ((  n     &     (  1      < <     i  ))     !=     0  )     {      count  ++  ;      }     else     {      maxi     =     Math  .  max  (  maxi       count  );      count     =     0  ;      }      }      return     maxi  ;      }      public     static     void     main  (  String  []     args  )     {      int     n     =     14  ;      System  .  out  .  println  (  maxConsecutiveOne  (  n  ));      }   }   
Python
   def   maxConsecutiveOne  (  n  ):   count   =   0   maxi   =   0   # traverse and check if bit set increment the count   for   i   in   range  (  32  ):   if   n   &   (  1    < <   i  ):   count   +=   1   else  :   maxi   =   max  (  maxi     count  )   count   =   0   return   maxi   if   __name__   ==   '__main__'  :   n   =   14   print  (  maxConsecutiveOne  (  n  ))   
C#
   using     System  ;   class     GFG   {      static     int     MaxConsecutiveOne  (  int     n  )      {      int     count     =     0  ;      int     maxi     =     0  ;      // traverse and check if bit set increment the count      for     (  int     i     =     0  ;     i      <     32  ;     i  ++  )      {      if     ((  n     &     (  1      < <     i  ))     !=     0  )      {      count  ++  ;      }      else      {      maxi     =     Math  .  Max  (  maxi       count  );      count     =     0  ;      }      }      return     maxi  ;      }      static     void     Main  ()      {      int     n     =     14  ;      Console  .  WriteLine  (  MaxConsecutiveOne  (  n  ));      }   }   
JavaScript
   function     maxConsecutiveOne  (  n  )     {      let     count     =     0  ;      let     maxi     =     0  ;      // traverse and check if bit set increment the count      for     (  let     i     =     0  ;     i      <     32  ;     i  ++  )     {      if     (  n     &     (  1      < <     i  ))     {      count  ++  ;      }     else     {      maxi     =     Math  .  max  (  maxi       count  );      count     =     0  ;      }      }      return     maxi  ;   }   // Driver code   let     n     =     14  ;   console  .  log  (  maxConsecutiveOne  (  n  ));   

Išvestis
3  

[Efektyvus metodas] Naudojant bitų manipuliavimą O(1) laikas ir O(1) erdvė

Idėja pagrįsta koncepcija, kad IR bitų sekos su a kairėn perkelta 1 versija efektyviai pašalina galą 1 iš kiekvienos iš eilės eilės 1s .  

Taigi operacija n = (n & (n < < 1)) sumažina kiekvienos sekos ilgį 1s vienu dvejetainiu vaizdu n . Jei ir toliau atliksime šią operaciją cikle, baigsime n = 0. Iteracijų, reikalingų pasiekti, skaičius iš tikrųjų yra ilgiausios iš eilės sekos ilgis 1s .

Iliustracija:


Norėdami įgyvendinti aukščiau pateiktą metodą, atlikite toliau nurodytus veiksmus.

  • Sukurkite kintamųjų skaičių, inicijuotą reikšme .
  • Truputį paleiskite kilpą, kol n nėra 0.
    • Kiekvienoje iteracijoje atlikite operaciją n = (n & (n < < 1))
    • Padidinkite skaičių vienu.
  • Grąžinimo skaičius
C++
   #include       using     namespace     std  ;   int     maxConsecutiveOnes  (  int     x  )   {      // Initialize result      int     count     =     0  ;      // Count the number of iterations to      // reach x = 0.      while     (  x  !=  0  )      {      // This operation reduces length      // of every sequence of 1s by one.      x     =     (  x     &     (  x      < <     1  ));      count  ++  ;      }      return     count  ;   }   int     main  ()   {      // Function Call      cout      < <     maxConsecutiveOnes  (  14  )      < <     endl  ;      return     0  ;   }   
Java
   class   GFG   {      private     static     int     maxConsecutiveOnes  (  int     x  )      {      // Initialize result      int     count     =     0  ;      // Count the number of iterations to      // reach x = 0.      while     (  x  !=  0  )      {      // This operation reduces length      // of every sequence of 1s by one.      x     =     (  x     &     (  x      < <     1  ));      count  ++  ;      }      return     count  ;      }      public     static     void     main  (  String     strings  []  )      {      System  .  out  .  println  (  maxConsecutiveOnes  (  14  ));      }   }   
Python
   def   maxConsecutiveOnes  (  x  ):   # Initialize result   count   =   0   # Count the number of iterations to   # reach x = 0.   while   (  x  !=  0  ):   # This operation reduces length   # of every sequence of 1s by one.   x   =   (  x   &   (  x    < <   1  ))   count  =  count  +  1   return   count   if   __name__   ==   '__main__'  :   print  (  maxConsecutiveOnes  (  14  ))   # by Anant Agarwal.   
C#
   using     System  ;   class     GFG     {          // Function to find length of the       // longest consecutive 1s in binary      // representation of a number       private     static     int     maxConsecutiveOnes  (  int     x  )      {          // Initialize result      int     count     =     0  ;      // Count the number of iterations      // to reach x = 0.      while     (  x     !=     0  )      {          // This operation reduces length      // of every sequence of 1s by one.      x     =     (  x     &     (  x      < <     1  ));      count  ++  ;      }      return     count  ;      }      // Driver code      public     static     void     Main  ()      {      Console  .  WriteLine  (  maxConsecutiveOnes  (  14  ));      }   }   // This code is contributed by Nitin Mittal.   
JavaScript
   function     maxConsecutiveOnes  (  x  )     {      // Initialize result      let     count     =     0  ;      // Count the number of iterations to reach x = 0      while     (  x     !==     0  )     {          // This operation reduces length of       // every sequence of 1s by one      x     =     (  x     &     (  x      < <     1  ));      count  ++  ;      }      return     count  ;   }   // Driver code   console  .  log  (  maxConsecutiveOnes  (  14  ));   
PHP
      // PHP program to find length    function   maxConsecutiveOnes  (  $n  )   {   // Initialize result   $count   =   0  ;   // Count the number of    // iterations to reach x = 0.   while   (  $n   !=   0  )   {   // This operation reduces    // length of every sequence   // of 1s by one.   $n   =   (  $n   &   (  $n    < <   1  ));   $count  ++  ;   }   return   $count  ;   }   echo   maxConsecutiveOnes  (  14  )   '  n  '  ;   ?>   

Išvestis
3  

Laiko sudėtingumas: O(1)
Pagalbinė erdvė: O(1)

[Kitas metodas] Eilučių konvertavimo naudojimas

Du kintamuosius max_len ir cur_len inicijuojame iki 0. Tada kartojame kiekvieną sveikojo skaičiaus n bitą. Jei mažiausiai reikšmingas bitas (LSB) yra 1, mes padidiname cur_len, kad būtų skaičiuojamas dabartinis iš eilės einančių 1 s. Jei LSB yra 0, dabartinė seka sulaužoma, todėl atnaujiname max_len, jei cur_len yra didesnis, ir iš naujo nustatome cur_len į 0. Patikrinę kiekvieną bitą, n perkeliame į dešinę 1, kad pereitume prie kito bito. Galiausiai, ciklui pasibaigus, atliekame paskutinį max_len atnaujinimą, jei galutinis cur_len yra didesnis, ir grąžiname max_len kaip ilgiausią iš eilės einančių 1 sek.

C++
   #include          #include          #include         using     namespace     std  ;   int     maxConsecutiveOnes  (  int     n  ){      string     binary     =     bitset   <  32  >  (  n  ).  to_string  ();      int     count     =     0  ;      int     maxCount     =     0  ;      // Loop through the binary string to      // find the longest consecutive 1s      for     (  int     i     =     0  ;     i      <     binary  .  size  ();     i  ++  )     {      if     (  binary  [  i  ]     ==     '1'  )     {      count  ++  ;      if     (  count     >     maxCount  )     {      maxCount     =     count  ;      }      }     else     {      count     =     0  ;      }      }      // Print the result      return     maxCount     ;       }   int     main  ()     {      int     n     =     14  ;      cout      < <     maxConsecutiveOnes  (  n  )      < <  'n'  ;      return     0  ;   }   
Java
   import     java.util.*  ;   public     class   Main     {      static     int     maxConsecutiveOnes  (  int     n  )     {      String     binary     =     String  .  format  (  '%32s'       Integer  .  toBinaryString  (  n  )).  replace  (  ' '       '0'  );      int     count     =     0  ;      int     maxCount     =     0  ;      // Loop through the binary string to      // find the longest consecutive 1s      for     (  int     i     =     0  ;     i      <     binary  .  length  ();     i  ++  )     {      if     (  binary  .  charAt  (  i  )     ==     '1'  )     {      count  ++  ;      if     (  count     >     maxCount  )     {      maxCount     =     count  ;      }      }     else     {      count     =     0  ;      }      }      // Return the result      return     maxCount  ;      }      public     static     void     main  (  String  []     args  )     {      int     n     =     14  ;      System  .  out  .  println  (  maxConsecutiveOnes  (  n  ));      }   }   
Python
   def   maxConsecutiveOnes  (  n  ):   binary   =   format  (  n     '032b'  )   count   =   0   maxCount   =   0   # Loop through the binary string to   # find the longest consecutive 1s   for   bit   in   binary  :   if   bit   ==   '1'  :   count   +=   1   if   count   >   maxCount  :   maxCount   =   count   else  :   count   =   0   # Return the result   return   maxCount   if   __name__   ==   '__main__'  :   n   =   14   print  (  maxConsecutiveOnes  (  n  ))   
C#
   using     System  ;   class     GFG   {      static     int     MaxConsecutiveOnes  (  int     n  )      {      string     binary     =     Convert  .  ToString  (  n       2  ).  PadLeft  (  32       '0'  );      int     count     =     0  ;      int     maxCount     =     0  ;      // Loop through the binary string to      // find the longest consecutive 1s      foreach     (  char     bit     in     binary  )      {      if     (  bit     ==     '1'  )      {      count  ++  ;      if     (  count     >     maxCount  )      maxCount     =     count  ;      }      else      {      count     =     0  ;      }      }      // Return the result      return     maxCount  ;      }      static     void     Main  ()      {      int     n     =     14  ;      Console  .  WriteLine  (  MaxConsecutiveOnes  (  n  ));      }   }   
JavaScript
   function     maxConsecutiveOnes  (  n  )     {      let     binary     =     n  .  toString  (  2  ).  padStart  (  32       '0'  );      let     count     =     0  ;      let     maxCount     =     0  ;      // Loop through the binary string to      // find the longest consecutive 1s      for     (  let     i     =     0  ;     i      <     binary  .  length  ;     i  ++  )     {      if     (  binary  [  i  ]     ===     '1'  )     {      count  ++  ;      if     (  count     >     maxCount  )     {      maxCount     =     count  ;      }      }     else     {      count     =     0  ;      }      }      // Return the result      return     maxCount  ;   }   // Driver code   let     n     =     14  ;   console  .  log  (  maxConsecutiveOnes  (  n  ));   

Išvestis
3  


 

Sukurti viktoriną