📜  阵列中任何对的OR和AND的最小XOR

📅  最后修改于: 2021-04-29 03:41:54             🧑  作者: Mango

给定一个由N个正整数组成的数组arr [] ,任务是找到给定数组中任意对的按位“或”与“与”的按位XOR的最小值。

例子:

方法:对于任何成对的元素,例如XY ,表达式(X&Y)xor(X | Y)的值可以写为:

通过以上计算,对于给定数组中的任何对(X,Y) ,表达式(X&Y)xor(X | Y)均被简化为X xorY 。因此,给定数组中任意对的按位“或”与“与”的按位XOR的最小值为最小值对的XOR,可以使用本文中讨论的方法进行计算。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
using namespace std;
 
// Function to find the minimum
// value of XOR of AND and OR of
// any pair in the given array
int maxAndXor(int arr[], int n)
{
    int ans = INT_MAX;
 
    // Sort the array
    sort(arr, arr + n);
 
    // Traverse the array arr[]
    for (int i = 0; i < n - 1; i++) {
 
        // Compare and Find the minimum
        // XOR value of an array.
        ans = min(ans, arr[i] ^ arr[i + 1]);
    }
 
    // Return the final answer
    return ans;
}
 
// Driver Code
int main()
{
    // Given array
    int arr[] = { 1, 2, 3, 4, 5 };
 
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Function Call
    cout << maxAndXor(arr, N);
    return 0;
}


Java
// Java program to for above approach
import java.io.*;
import java.util.Arrays;
class GFG {
 
    // Function to find the minimum
    // value of XOR of AND and OR of
    // any pair in the given array
    static int maxAndXor(int arr[], int n)
    {
        int ans = Integer.MAX_VALUE;
 
        // Sort the array
        Arrays.sort(arr);
 
        // Traverse the array arr[]
        for (int i = 0; i < n - 1; i++) {
 
            // Compare and Find the minimum
            // XOR value of an array.
            ans = Math.min(ans, arr[i] ^ arr[i + 1]);
        }
 
        // Return the final answer
        return ans;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        // Given array arr[]
        int arr[] = new int[] { 1, 2, 3, 4, 5 };
 
        int N = arr.length;
 
        // Function Call
        System.out.println(maxAndXor(arr, N));
    }
}
 
// This code is contributed by Shubham Prakash


Python3
# Python3 program for the above approach
 
# Function to find the minimum
# value of XOR of AND and OR of
# any pair in the given array
 
 
def maxAndXor(arr, n):
 
    ans = float('inf')
 
    # Sort the array
    arr.sort()
 
    # Traverse the array arr[]
    for i in range(n - 1):
 
        # Compare and Find the minimum
        # XOR value of an array.
        ans = min(ans, arr[i] ^ arr[i + 1])
 
    # Return the final answer
    return ans
 
 
# Driver Code
if __name__ == '__main__':
 
    # Given array
    arr = [1, 2, 3, 4, 5]
    N = len(arr)
 
    # Function Call
    print(maxAndXor(arr, N))
 
# This code is contributed by Shivam Singh


C#
// C# program to for above approach
using System;
class GFG {
 
    // Function to find the minimum
    // value of XOR of AND and OR of
    // any pair in the given array
    static int maxAndXor(int[] arr, int n)
    {
        int ans = 9999999;
 
        // Sort the array
        Array.Sort(arr);
 
        // Traverse the array arr[]
        for (int i = 0; i < n - 1; i++) {
 
            // Compare and Find the minimum
            // XOR value of an array.
            ans = Math.Min(ans, arr[i] ^ arr[i + 1]);
        }
 
        // Return the final answer
        return ans;
    }
 
    // Driver Code
    public static void Main()
    {
        // Given array arr[]
        int[] arr = new int[] { 1, 2, 3, 4, 5 };
 
        int N = arr.Length;
 
        // Function Call
        Console.Write(maxAndXor(arr, N));
    }
}
 
// This code is contributed by Code_Mech


输出:
1

时间复杂度: O(N * log N)
辅助空间: O(1)