给定一个由N个整数组成的数组arr [] ,任务是找到一对偶数奇偶校验和最大和的对。
例子:
Input: arr[] = {18, 15, 8, 9, 14}
Output: 18 15
Explanation:
Binary Representation of elements –
18 => 10010, Parity = 2
15 => 1111, Parity = 4
8 => 1000, Parity = 1
9 => 1001, Parity = 2
14 => 1110, Parity = 3
Here, parity for elements 18, 15 and 9 are even
Hence, pair with maximum sum will be 18 and 15
Input: arr[] = {5, 3, 4, 2, 9}
Output: 9 5
Explanation:
The array contains three even parity values 5, 3 and 9.
Hence, pair with maximum sum will be 9 and 5.
方法:问题中的关键观察是,如果我们选择两个最大的偶数个奇偶校验,那么它将是理想的答案。
遍历数组并检查当前元素是否具有偶校验。然后,以偶数校验更新两个最大数。
if (findParity(arr[i]) % 2 == 0)
if (arr[i] >= firstMaximum)
secondMaximum = firstMaximum
firstMaximum = arr[i]
elif (arr[i] >= secondMaximum)
secondMaximum = arr[i]
下面是上述方法的实现:
C++
// C++ implementation to find
// a pair with even parity and
// maximum sum
#include
using namespace std;
const int sz = 1e3;
// Function that returns true
// if count of set bits
// in given number is even
bool isEvenParity(int x)
{
// Parity will store the
// count of set bits
int parity = 0;
while (x != 0) {
if (x & 1)
parity++;
x = x >> 1;
}
if (parity % 2 == 0)
return true;
else
return false;
}
// Function to print the
// elements of the array
void printArray(int arr[], int len)
{
for (int i = 0; i < len; i++) {
cout << arr[i] << ' ';
}
}
// Function to remove all the
// even parity elements from
// the given array
void findPairEvenParity(
int arr[], int len)
{
int firstMaximum = INT_MIN;
int secondMaximum = INT_MIN;
// Traverse the array
for (int i = 0; i < len; i++) {
// If the current element
// has even parity
if (isEvenParity(arr[i])) {
if (arr[i] >= firstMaximum){
secondMaximum = firstMaximum;
firstMaximum = arr[i];
}
else if (arr[i] >= secondMaximum){
secondMaximum = arr[i];
}
}
}
cout << firstMaximum
<< " " << secondMaximum;
}
// Driver Code
int main()
{
int arr[] = { 18, 15, 8, 9, 14 };
int len = sizeof(arr) / sizeof(int);
// Function Call
findPairEvenParity(arr, len);
return 0;
}
Java
// Java implementation to find
// a pair with even parity and
// maximum sum
import java.util.*;
class GFG{
static int sz = (int) 1e3;
// Function that returns true
// if count of set bits
// in given number is even
static boolean isEvenParity(int x)
{
// Parity will store the
// count of set bits
int parity = 0;
while (x != 0)
{
if (x % 2 == 1)
parity++;
x = x >> 1;
}
if (parity % 2 == 0)
return true;
else
return false;
}
// Function to print the
// elements of the array
static void printArray(int arr[],
int len)
{
for(int i = 0; i < len; i++)
{
System.out.print(arr[i] + " ");
}
}
// Function to remove all the
// even parity elements from
// the given array
static void findPairEvenParity(int arr[],
int len)
{
int firstMaximum = Integer.MIN_VALUE;
int secondMaximum = Integer.MIN_VALUE;
// Traverse the array
for(int i = 0; i < len; i++)
{
// If the current element
// has even parity
if (isEvenParity(arr[i]))
{
if (arr[i] >= firstMaximum)
{
secondMaximum = firstMaximum;
firstMaximum = arr[i];
}
else if (arr[i] >= secondMaximum)
{
secondMaximum = arr[i];
}
}
}
System.out.print(firstMaximum + " " +
secondMaximum);
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 18, 15, 8, 9, 14 };
int len = arr.length;
// Function Call
findPairEvenParity(arr, len);
}
}
// This code is contributed by amal kumar choubey
Python3
# Python3 implementation to find
# a pair with even parity and
# maximum sum
import sys
sz = 1e3
# Function that returns true
# if count of set bits
# in given number is even
def isEvenParity(x):
# Parity will store the
# count of set bits
parity = 0
while x != 0:
if (x & 1):
parity = parity + 1;
x = x >> 1
if (parity % 2 == 0):
return True
else:
return False
# Function to print the
# elements of the array
def printArray(arr, n):
for i in range(0, n):
print(arr[i], end = ' ')
# Function to remove all the
# even parity elements from
# the given array
def findPairEvenParity(arr, n):
firstMaximum = -1
secondMaximum = -1
# Traverse the array
for i in range(0, n):
# If the current element
# has even parity
if isEvenParity(arr[i]) == True:
if (arr[i] >= firstMaximum):
secondMaximum = firstMaximum
firstMaximum = arr[i]
elif (arr[i] >= secondMaximum):
secondMaximum = arr[i]
print(firstMaximum, secondMaximum)
# Driver Code
if __name__ == "__main__":
arr = [ 18, 15, 8, 9, 14 ]
n = len(arr)
# Function call
findPairEvenParity(arr, n)
# This code is contributed by akhilsaini
C#
// C# implementation to find
// a pair with even parity and
// maximum sum
using System;
class GFG{
static int sz = (int) 1e3;
// Function that returns true
// if count of set bits
// in given number is even
static bool isEvenParity(int x)
{
// Parity will store the
// count of set bits
int parity = 0;
while (x != 0)
{
if (x % 2 == 1)
parity++;
x = x >> 1;
}
if (parity % 2 == 0)
return true;
else
return false;
}
// Function to print the
// elements of the array
static void printArray(int []arr,
int len)
{
for(int i = 0; i < len; i++)
{
Console.Write(arr[i] + " ");
}
}
// Function to remove all the
// even parity elements from
// the given array
static void findPairEvenParity(int []arr,
int len)
{
int firstMaximum = Int32.MinValue;
int secondMaximum = Int32.MinValue;
// Traverse the array
for(int i = 0; i < len; i++)
{
// If the current element
// has even parity
if (isEvenParity(arr[i]))
{
if (arr[i] >= firstMaximum)
{
secondMaximum = firstMaximum;
firstMaximum = arr[i];
}
else if (arr[i] >= secondMaximum)
{
secondMaximum = arr[i];
}
}
}
Console.Write(firstMaximum + " " +
secondMaximum);
}
// Driver Code
public static void Main()
{
int []arr = { 18, 15, 8, 9, 14 };
int len = arr.Length;
// Function Call
findPairEvenParity(arr, len);
}
}
// This code is contributed by Code_Mech
输出:
18 15