给定一个由N个正元素组成的数组arr [] ,任务是从给定数组中找到一对最大的按位“或”值。
例子:
Input: arr[] = {3, 6, 8, 16}
Output: 24
Explanation:
The pair giving maximum OR value is (8, 16)
8|16 = 24
Input: arr[] = {8, 7, 3, 12}
Output: 15
Explanation:
There are more than one pair giving us the maximum OR value.
8|7 = 15
天真的方法:天真的方法是指数组中一对的最大OR值。
高效方法:在本文中,我们将讨论针对给定问题的优化解决方案。
请按照以下步骤解决问题:
- 从数组中找到最大的元素。
- 在最大的元素和其余的数组元素之间一对一地执行按位或运算。这是因为在最大元素中设置位的排列将有助于数组元素可能达到的最大OR值。
- 打印执行上述步骤获得的最大OR值。
下面是上述方法的实现:
C++
// C++ implementation of
// the approach above
#include
using namespace std;
// Function to return the maximum
// bitwise OR for any pair of the
// given array in O(n) time complexity.
int maxOR(int arr[], int n)
{
// Find the maximum
// element in the array
int max_value
= *max_element(arr,
arr + n);
// Stores the maximum
// OR value
int ans = 0;
// Traverse the array and
// perform Bitwise OR
// between every array element
// with the maximum element
for (int i = 0; i < n; i++) {
ans = max(ans, (max_value
| arr[i]));
}
return ans;
}
// Driver Code
int main()
{
int arr[] = { 3, 6, 8, 16 };
int n = sizeof(arr)
/ sizeof(arr[0]);
cout << maxOR(arr, n);
return 0;
}
Java
// Java implementation of
// the approach above
import java.util.Arrays;
class GFG{
// Function to return the maximum
// bitwise OR for any pair of the
// given array in O(n) time complexity.
static int maxOR(int []arr, int n)
{
// Find the maximum
// element in the array
int max_value = Arrays.stream(arr).max().getAsInt();
// Stores the maximum
// OR value
int ans = 0;
// Traverse the array and
// perform Bitwise OR
// between every array element
// with the maximum element
for (int i = 0; i < n; i++)
{
ans = Math.max(ans, (max_value | arr[i]));
}
return ans;
}
// Driver Code
public static void main(String[] args)
{
int arr[] = new int[]{ 3, 6, 8, 16 };
int n = 4;
System.out.print(maxOR(arr, n));
}
}
// This code is contributed by Ritik Bansal
Python3
# Python3 implementation of
# the approach above
# Function to return the maximum
# bitwise OR for any pair of the
# given array in O(n) time complexity.
def maxOR(arr, n):
# Find the maximum
# element in
max_value = max(arr)
# Stores the maximum
# OR value the array
ans = 0
# Traverse the array and
# perform Bitwise OR
# between every array element
# with the maximum element
for i in range(n):
ans = max(ans, (max_value | arr[i]))
return ans
# Driver Code
if __name__ == "__main__":
arr = [ 3, 6, 8, 16 ]
n = len(arr)
print(maxOR(arr, n))
# This code is contributed by jana_sayantan
C#
// C# implementation of
// the approach above
using System;
using System.Linq;
class GFG{
// Function to return the maximum
// bitwise OR for any pair of the
// given array in O(n) time complexity.
static int maxOR(int []arr, int n)
{
// Find the maximum
// element in the array
int max_value = arr.Max();
// Stores the maximum
// OR value
int ans = 0;
// Traverse the array and
// perform Bitwise OR
// between every array element
// with the maximum element
for(int i = 0; i < n; i++)
{
ans = Math.Max(ans, (max_value |
arr[i]));
}
return ans;
}
// Driver Code
public static void Main(String[] args)
{
int []arr = { 3, 6, 8, 16 };
int n = 4;
Console.Write(maxOR(arr, n));
}
}
// This code is contributed by 29AjayKumar
Javascript
输出:
24
时间复杂度: O(N)
辅助空间: O(1)