logo

Најдуже узастопне 1 у бинарном представљању

Дат је број н Задатак је пронаћи дужину најдужег узастопног серије у својој бинарној представи.
Примери:  

Улаз: н = 14
Излаз: 3
Објашњење: Бинарни приказ броја 14 је 111 0.



Улаз: н = 222
Излаз: 4
Објашњење:  Бинарна репрезентација 222 је 110 1111 0.

Садржај

[Наивни приступ] Итеративно време О(1) и простор О(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)); 

Излаз
3 

[Ефикасан приступ] Коришћење манипулације битовима О(1) Време и О(1) Простор

Идеја се заснива на концепту да И секвенце битова са а лево померено за 1 сама верзија ефикасно уклања заостатак 1 из сваког низа узастопних .  



Дакле, операција н = (н & (н<< 1)) смањује дужину сваке секвенце по један у бинарној репрезентацији н . Ако наставимо да радимо ову операцију у петљи коју ћемо завршити н = 0. Број итерација потребних за постизање је заправо дужина најдужег узастопног низа .

Илустрација:




Пратите доле наведене кораке да бисте применили горњи приступ:

  • Креирајте променљиву цоунт иницијализовану вредношћу .
  • Покрените петљу вхиле до н није 0.
    • У свакој итерацији извршите операцију н = (н & (н<< 1))
    • Број прираштаја за један.
  • Број поврата
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'; ?> 

Излаз
3 

Временска сложеност: О(1)
Помоћни простор: О(1)

[Други приступ] Коришћење конверзије стрингова

Иницијализујемо две променљиве мак_лен и цур_лен на 0. Затим понављамо сваки бит целог броја н. Ако је најмањи битни бит (ЛСБ) 1, повећавамо цур_лен да бисмо пребројали тренутни низ узастопних 1. Ако је ЛСБ 0, он прекида тренутни низ па ажурирамо мак_лен ако је цур_лен већи и ресетујемо цур_лен на 0. Након провере сваког бита померамо н за 1 удесно да бисмо прешли на следећи бит. Коначно након завршетка петље вршимо последње ажурирање мак_лен ако је коначни цур_лен већи и враћамо мак_лен као дужину најдуже секвенце узастопних 1.

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

Излаз
3