Maximum Bitwise AND pair from given range - GeeksforGeeks

11 Aug, 2021
Given a range [L, R], the task is to find a pair (X, Y) such that L ≤ X < Y ≤ R and X & Y is maximum among all the possible pairs then print the bitwise AND of the found pair.Examples:  
Input: L = 1, R = 9 Output: 8 In all the possible pairs, pair (8, 9) gives the maximum value for bitwise AND.Input: L = 523641, R = 985624 Output: 985622  
 
Naive Approach: Iterate from L to R and check the bitwise AND for every possible pair and print the maximum value in the end.Below is the implementation of the above approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to return the maximum bitwise AND// possible among all the possible pairsint maxAND(int L, int R){    int maximum = L & R;     for (int i = L; i < R; i++)        for (int j = i + 1; j <= R; j++)             // Maximum among all (i, j) pairs            maximum = max(maximum, (i & j));     return maximum;} // Driver codeint main(){    int L = 1, R = 632;    cout << maxAND(L, R);     return 0;}
// Java implementation of the approachclass GFG{ // Function to return the maximum bitwise AND// possible among all the possible pairsstatic int maxAND(int L, int R){    int maximum = L & R;     for (int i = L; i < R; i++)        for (int j = i + 1; j <= R; j++)             // Maximum among all (i, j) pairs            maximum = Math.max(maximum, (i & j));     return maximum;} // Driver codepublic static void main(String[] args){    int L = 1, R = 632;    System.out.println(maxAND(L, R));}} // This code contributed by Rajput-Ji
# Python 3 implementation of the approach # Function to return the maximum bitwise AND# possible among all the possible pairsdef maxAND(L, R):    maximum = L & R     for i in range(L, R, 1):        for j in range(i + 1, R + 1, 1):                         # Maximum among all (i, j) pairs            maximum = max(maximum, (i & j))     return maximum # Driver codeif __name__ == '__main__':    L = 1    R = 632    print(maxAND(L, R)) # This code is contributed by# Surendra_Gangwar
// C# implementation of the approachusing System; class GFG{ // Function to return the maximum bitwise AND// possible among all the possible pairsstatic int maxAND(int L, int R){    int maximum = L & R;     for (int i = L; i < R; i++)        for (int j = i + 1; j <= R; j++)             // Maximum among all (i, j) pairs            maximum = Math.Max(maximum, (i & j));     return maximum;} // Driver codepublic static void Main(String[] args){    int L = 1, R = 632;    Console.WriteLine(maxAND(L, R));}} // This code has been contributed by 29AjayKumar
<?php// PHP implementation of the approach // Function to return the maximum bitwise AND// possible among all the possible pairsfunction maxAND($L, $R){    $maximum = $L & $R;     for ($i = $L; $i < $R; $i++)        for ($j = $i + 1; $j <= $R; $j++)             // Maximum among all (i, j) pairs            $maximum = max($maximum, ($i & $j));     return $maximum;} // Driver code$L = 1; $R = 632;echo(maxAND($L, $R)); // This code contributed by Code_Mech.?>
<script> // JavaScript implementation of the approach // Function to return the maximum bitwise AND// possible among all the possible pairsfunction maxAND(L, R){    var maximum = L & R;     for (var i = L; i < R; i++)        for (var j = i + 1; j <= R; j++)             // Maximum among all (i, j) pairs            maximum = Math.max(maximum, (i & j));     return maximum;} // Driver codevar L = 1, R = 632;document.write( maxAND(L, R));  </script>
630
 
Time Complexity: O(n2)Efficient Approach: If we carefully observe in the range [L, R], the maximum AND is possible either between the AND of (R) and (R – 1) or AND of (R – 1) and (R – 2).Below is the implementation of the above approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to return the maximum bitwise AND// possible among all the possible pairsint maxAND(int L, int R){     // If there is only a single value    // in the range [L, R]    if (L == R)        return L;     // If there are only two values    // in the range [L, R]    else if ((R - L) == 1)        return (R & L);    else {        if (((R - 1) & R) > ((R - 2) & (R - 1)))            return ((R - 1) & R);        else            return ((R - 2) & (R - 1));    }} // Driver codeint main(){    int L = 1, R = 632;    cout << maxAND(L, R);     return 0;}
// Java implementation of the approachclass GfG{ // Function to return the maximum bitwise AND// possible among all the possible pairsstatic int maxAND(int L, int R){     // If there is only a single value    // in the range [L, R]    if (L == R)        return L;     // If there are only two values    // in the range [L, R]    else if ((R - L) == 1)        return (R & L);    else {        if (((R - 1) & R) > ((R - 2) & (R - 1)))            return ((R - 1) & R);        else            return ((R - 2) & (R - 1));    }} // Driver codepublic static void main(String[] args){    int L = 1, R = 632;    System.out.println(maxAND(L, R));}} // This code is contributed by// Prerna Saini
# Python3 implementation of the approach # Function to return the maximum bitwise AND# possible among all the possible pairsdef maxAND(L, R):     # If there is only a single value    # in the range [L, R]    if (L == R):        return L;     # If there are only two values    # in the range [L, R]    elif ((R - L) == 1):        return (R & L);    else:        if (((R - 1) & R) >            ((R - 2) & (R - 1))):            return ((R - 1) & R);        else:            return ((R - 2) & (R - 1)); # Driver codeL = 1;R = 632;print(maxAND(L, R)); # This code contributed by PrinciRaj1992
// C# implementation of the approachusing System; class GfG{     // Function to return the maximum bitwise AND    // possible among all the possible pairs    static int maxAND(int L, int R)    {             // If there is only a single value        // in the range [L, R]        if (L == R)            return L;             // If there are only two values        // in the range [L, R]        else if ((R - L) == 1)            return (R & L);        else        {            if (((R - 1) & R) > ((R - 2) & (R - 1)))                return ((R - 1) & R);            else                return ((R - 2) & (R - 1));        }    }         // Driver code    public static void Main()    {        int L = 1, R = 632;        Console.WriteLine(maxAND(L, R));    }} // This code is contributed by Ryuga
<?php// PHP implementation of the approach // Function to return the maximum bitwise AND// possible among all the possible pairsfunction maxAND($L, $R){     // If there is only a single value    // in the range [L, R]    if ($L == $R)        return $L;     // If there are only two values    // in the range [L, R]    else if (($R - $L) == 1)        return ($R & $L);    else    {        if ((($R - 1) & $R) > (($R - 2) & ($R - 1)))            return (($R - 1) & $R);        else            return (($R - 2) & ($R - 1));    }} // Driver code$L = 1;$R = 632;echo maxAND($L, $R); // This code is contributed by mits?>
<script>     // JavaScript implementation of the approach         // Function to return the maximum bitwise AND    // possible among all the possible pairs    function maxAND(L, R)    {              // If there is only a single value        // in the range [L, R]        if (L == R)            return L;              // If there are only two values        // in the range [L, R]        else if ((R - L) == 1)            return (R & L);        else        {            if (((R - 1) & R) > ((R - 2) & (R - 1)))                return ((R - 1) & R);            else                return ((R - 2) & (R - 1));        }    }     let L = 1, R = 632;      document.write(maxAND(L, R));     </script>
630
 
Time Complexity: O(1)Auxiliary Space: O(1)
prerna saini
ankthon
Mithun Kumar
Rajput-Ji
29AjayKumar
SURENDRA_GANGWAR
Code_Mech
princiraj1992
famously
rameshtravel07
pankajsharmagfg
Bitwise-AND
Algorithms
Bit Magic
Mathematical
Technical Scripter
Mathematical
Bit Magic
Algorithms
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
SDE SHEET - A Complete Guide for SDE Preparation
DSA Sheet by Love Babbar
How to write a Pseudo Code?
Understanding Time Complexity with Simple Examples
Introduction to Algorithms
Bitwise Operators in C/C++
Left Shift and Right Shift Operators in C/C++
Travelling Salesman Problem | Set 1 (Naive and Dynamic Programming)
Count set bits in an integer
How to swap two numbers without using a temporary variable?