📌  相关文章
📜  在奇偶校验的数组中找到最大和对

📅  最后修改于: 2021-05-14 08:24:20             🧑  作者: Mango

给定一个由N个整数组成的数组arr [] ,任务是找到一对偶数奇偶校验和最大和的对。

例子:

方法:问题中的关键观察是,如果我们选择两个最大的偶数个奇偶校验,那么它将是理想的答案。
遍历数组并检查当前元素是否具有偶校验。然后,以偶数校验更新两个最大数。

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