给定一个由N个正整数组成的数组arr [] ,任务是找到给定数组中任意对的按位“或”与“与”的按位XOR的最小值。
例子:
Input: arr[] = {1, 2, 3, 4, 5}
Output: 1
Explanation:
For element 2 & 3:
The value of the expression (2&3) xor (2|3) is 1, which is the minimum from all the pairs in the given array.
Input : arr[] = {3, 6, 8, 4, 5}
Output : 1
Explanation:
For element 4 & 5:
The value of the expression (4&5) xor (4|5) is 1, which is the minimum from all the pairs in the given array.
方法:对于任何成对的元素,例如X和Y ,表达式(X&Y)xor(X | Y)的值可以写为:
=> (X.Y)^(X+Y)
=> (X.Y)(X+Y)’ + (X.Y)'(X+Y)
=> (X.Y)(X’.Y’) + (X’+Y’)(X+Y)
=> X.X’.Y.Y’ + X’.X + X’.Y + Y’.X + Y’.Y
=> 0 + 0 + X’.Y + Y’.X + 0
=> 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
Javascript
1
时间复杂度: O(N * log N)
辅助空间: O(1)