Given a number N, the task is to find the maximum distance between two 1’s in the binary representation of given N. Print -1 if binary representation contains less than two 1’s.

**Examples:**

Input:N = 131Output:6 131 in binary = 10000011. The maximum distance between two 1's = 6.Input:N = 8Output:-1 8 in binary = 01000. It contains less than two 1's.

**Approach:**

- First find the binary representation of N.
- For each bit calculated, check if its a ‘1’.
- Store the index of first ‘1’ found in first_1, and the last ‘1’ found in last_1
- Then check if the last_1 is less than or equal to first_1. It will be the case when N is a power of 2. Hence print -1 in this case.
- In any other case, find the difference between the last_1 and first_1. This will be the required distance.

Below is the implementation of the above approach:

## C++

`// C++ program to find the ` `// Maximum distance between two 1's ` `// in Binary representation of N ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `int` `longest_gap(` `int` `N) ` `{ ` ` ` ` ` `int` `distance = 0, count = 0, ` ` ` `first_1 = -1, last_1 = -1; ` ` ` ` ` `// Compute the binary representation ` ` ` `while` `(N) { ` ` ` ` ` `count++; ` ` ` ` ` `int` `r = N & 1; ` ` ` ` ` `if` `(r == 1) { ` ` ` `first_1 = first_1 == -1 ` ` ` `? count ` ` ` `: first_1; ` ` ` `last_1 = count; ` ` ` `} ` ` ` ` ` `N = N / 2; ` ` ` `} ` ` ` ` ` `// if N is a power of 2 ` ` ` `// then return -1 ` ` ` `if` `(last_1 <= first_1) { ` ` ` `return` `-1; ` ` ` `} ` ` ` `// else find the distance ` ` ` `// between the first position of 1 ` ` ` `// and last position of 1 ` ` ` `else` `{ ` ` ` `distance = (last_1 - first_1 - 1); ` ` ` `return` `distance; ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `N = 131; ` ` ` `cout << longest_gap(N) << endl; ` ` ` ` ` `N = 8; ` ` ` `cout << longest_gap(N) << endl; ` ` ` ` ` `N = 17; ` ` ` `cout << longest_gap(N) << endl; ` ` ` ` ` `N = 33; ` ` ` `cout << longest_gap(N) << endl; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to find the ` `// Maximum distance between two 1's ` `// in Binary representation of N ` `class` `GFG ` `{ ` ` ` `static` `int` `longest_gap(` `int` `N) ` ` ` `{ ` ` ` `int` `distance = ` `0` `, count = ` `0` `, ` ` ` `first_1 = -` `1` `, last_1 = -` `1` `; ` ` ` ` ` `// Compute the binary representation ` ` ` `while` `(N != ` `0` `) ` ` ` `{ ` ` ` `count++; ` ` ` ` ` `int` `r = N & ` `1` `; ` ` ` ` ` `if` `(r == ` `1` `) ` ` ` `{ ` ` ` `first_1 = first_1 == -` `1` `? ` ` ` `count : first_1; ` ` ` `last_1 = count; ` ` ` `} ` ` ` `N = N / ` `2` `; ` ` ` `} ` ` ` ` ` `// if N is a power of 2 ` ` ` `// then return -1 ` ` ` `if` `(last_1 <= first_1) ` ` ` `{ ` ` ` `return` `-` `1` `; ` ` ` `} ` ` ` ` ` `// else find the distance ` ` ` `// between the first position of 1 ` ` ` `// and last position of 1 ` ` ` `else` ` ` `{ ` ` ` `distance = (last_1 - first_1 - ` `1` `); ` ` ` `return` `distance; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `main (String[] args) ` ` ` `{ ` ` ` `int` `N = ` `131` `; ` ` ` `System.out.println(longest_gap(N)); ` ` ` ` ` `N = ` `8` `; ` ` ` `System.out.println(longest_gap(N)); ` ` ` ` ` `N = ` `17` `; ` ` ` `System.out.println(longest_gap(N)); ` ` ` ` ` `N = ` `33` `; ` ` ` `System.out.println(longest_gap(N)); ` ` ` `} ` `} ` ` ` `// This code is contributed by AnkitRai01 ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to find the ` `# Maximum distance between two 1's ` `# in Binary representation of N ` `def` `longest_gap(N): ` ` ` ` ` `distance ` `=` `0` ` ` `count ` `=` `0` ` ` `first_1 ` `=` `-` `1` ` ` `last_1 ` `=` `-` `1` ` ` ` ` `# Compute the binary representation ` ` ` `while` `(N > ` `0` `): ` ` ` `count ` `+` `=` `1` ` ` ` ` `r ` `=` `N & ` `1` ` ` ` ` `if` `(r ` `=` `=` `1` `): ` ` ` `if` `first_1 ` `=` `=` `-` `1` `: ` ` ` `first_1 ` `=` `count ` ` ` `else` `: ` ` ` `first_1 ` `=` `first_1 ` ` ` ` ` `last_1 ` `=` `count ` ` ` ` ` `N ` `=` `N ` `/` `/` `2` ` ` ` ` `# if N is a power of 2 ` ` ` `# then return -1 ` ` ` `if` `(last_1 <` `=` `first_1): ` ` ` `return` `-` `1` ` ` ` ` `# else find the distance ` ` ` `# between the first position of 1 ` ` ` `# and last position of 1 ` ` ` `else` `: ` ` ` `distance ` `=` `last_1 ` `-` `first_1 ` `-` `1` ` ` `return` `distance ` ` ` `# Driver code ` `N ` `=` `131` `print` `(longest_gap(N)) ` ` ` `N ` `=` `8` `print` `(longest_gap(N)) ` ` ` `N ` `=` `17` `print` `(longest_gap(N)) ` ` ` `N ` `=` `33` `print` `(longest_gap(N)) ` ` ` `# This code is contributed by Mohit Kumar ` |

*chevron_right*

*filter_none*

## C#

`// C# program to find the ` `// Maximum distance between two 1's ` `// in Binary representation of N ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` `static` `int` `longest_gap(` `int` `N) ` ` ` `{ ` ` ` `int` `distance = 0, count = 0, ` ` ` `first_1 = -1, last_1 = -1; ` ` ` ` ` `// Compute the binary representation ` ` ` `while` `(N != 0) ` ` ` `{ ` ` ` `count++; ` ` ` ` ` `int` `r = N & 1; ` ` ` ` ` `if` `(r == 1) ` ` ` `{ ` ` ` `first_1 = first_1 == -1 ? ` ` ` `count : first_1; ` ` ` `last_1 = count; ` ` ` `} ` ` ` `N = N / 2; ` ` ` `} ` ` ` ` ` `// if N is a power of 2 ` ` ` `// then return -1 ` ` ` `if` `(last_1 <= first_1) ` ` ` `{ ` ` ` `return` `-1; ` ` ` `} ` ` ` ` ` `// else find the distance ` ` ` `// between the first position of 1 ` ` ` `// and last position of 1 ` ` ` `else` ` ` `{ ` ` ` `distance = (last_1 - first_1 - 1); ` ` ` `return` `distance; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `Main (String []args) ` ` ` `{ ` ` ` `int` `N = 131; ` ` ` `Console.WriteLine(longest_gap(N)); ` ` ` ` ` `N = 8; ` ` ` `Console.WriteLine(longest_gap(N)); ` ` ` ` ` `N = 17; ` ` ` `Console.WriteLine(longest_gap(N)); ` ` ` ` ` `N = 33; ` ` ` `Console.WriteLine(longest_gap(N)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Arnab Kundu ` |

*chevron_right*

*filter_none*

**Output:**

6 -1 3 4

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Maximum 0's between two immediate 1's in binary representation
- Maximum number of consecutive 1's in binary representation of all the array elements
- Maximum distance between two 1s in a Binary Array in a given range
- Find the occurrence of the given binary pattern in the binary representation of the array elements
- Find value of k-th bit in binary representation
- Binary representation of a given number
- Binary representation of next number
- XOR counts of 0s and 1s in binary representation
- 1 to n bit numbers with no consecutive 1s in binary representation.
- Binary representation of previous number
- Count numbers have all 1s together in binary representation
- Largest number with binary representation is m 1's and m-1 0's
- 1 to n bit numbers with no consecutive 1s in binary representation
- Next greater number than N with exactly one bit different in binary representation of N
- Decimal representation of given binary string is divisible by 20 or not
- Find the n-th number whose binary representation is a palindrome
- Prime Number of Set Bits in Binary Representation | Set 1
- Check if all the set bits of the binary representation of N are at least K places away
- Decimal representation of given binary string is divisible by 5 or not
- Check if binary representation of a number is palindrome

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.