İkili Gösterimde En Uzun Ardışık 1'ler

Bir sayı verildi N Görev ardışık en uzun çizginin uzunluğunu bulmaktır. 1s serinin ikili gösterimi.
Örnekler:  

Giriş: n = 14
Çıkış: 3
Açıklama: 14'ün ikili gösterimi 111 0.

Giriş: sayı = 222
Çıkış: 4
Açıklama:  222'nin ikili gösterimi 110'dur 1111 0.

İçerik Tablosu

[Naif Yaklaşım] İteratif Zaman O(1) ve Uzay 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  ));   

Çıkış
3  

[Etkili Yaklaşım] Bit Manipülasyonunu Kullanma O(1) Zaman ve O(1) Uzay

Fikir, şu konsepte dayanmaktadır: VE bit dizisinin bir sola 1 kaydırıldı kendi sürümü, sondakileri etkili bir şekilde kaldırır 1 ardışık her diziden 1s .  

Yani operasyon N = (n & (n < < 1)) her dizinin uzunluğunu azaltır 1s ikili temsilde birer birer N . Bu işlemi bir döngü içinde yapmaya devam edersek, şunu elde ederiz: N = 0. Ulaşmak için gereken yineleme sayısı aslında ardışık en uzun dizinin uzunluğudur 1s .

İllüstrasyon:


Yukarıdaki yaklaşımı uygulamak için aşağıdaki adımları izleyin:

  • Değerle başlatılan bir değişken sayısı oluşturun .
  • Şu ana kadar bir süre döngüsü çalıştırın N değil 0.
    • Her yinelemede işlemi gerçekleştirin N = (n & (n < < 1))
    • Sayıyı birer artırın.
  • Dönüş sayısı
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  '  ;   ?>   

Çıkış
3  

Zaman Karmaşıklığı: Ç(1)
Yardımcı Alan: Ç(1)

[Başka Bir Yaklaşım] Dize Dönüşümünü Kullanmak

Max_len ve cur_len adlı iki değişkeni 0 olarak başlatırız. Daha sonra n tamsayısının her bir bitini yineleriz. En az anlamlı bit (LSB) 1 ise cur_len'i art arda gelen 1'lerin mevcut akışını saymak için artırırız. Eğer LSB 0 ise mevcut sırayı keser, dolayısıyla eğer cur_len büyükse max_len'i güncelleriz ve cur_len'i 0'a sıfırlarız. Her biti kontrol ettikten sonra bir sonraki bit'e geçmek için n'yi 1 sağa kaydırırız. Son olarak, döngü sona erdikten sonra, eğer son cur_len daha büyükse, max_len'in son güncellemesini gerçekleştiririz ve max_len'i ardışık 1'lerin en uzun dizisinin uzunluğu olarak döndürürüz.

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  ));   

Çıkış
3  


 

Test Oluştur