给定一个由N 个正整数组成的数组arr[] ,任务是找到给定数组中任何对的按位 OR 和 AND 的按位异或的最小值。
例子:
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 xor Y 。因此,给定数组中任何对的按位或和与的按位异或的最小值是给定的最小值对的异或,可以使用本文中讨论的方法计算。
下面是上述方法的实现:
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)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live