Given an array arr[] and an odd integer N, the task is to check if N numbers can be selected from the array having even sum. Print Yes if possible. Otherwise print No.
Examples:
Input: arr[] = {9, 2, 3, 4, 1, 8, 7, 7, 6}, N = 5
Output: Yes
Explanation: {9, 3, 1, 7, 6} are the N elements having even sum
Input: arr[] = {1, 3, 7, 9, 3}, N = 3
Output: No
Approach: Follow the steps below to solve the problem:
- Count even and odd integers and store it in even_freq and odd_freq respectively.
- If even_freq exceeds N, then take all even numbers and their sum will be even. Therefore, print “Yes”.
- Otherwise, check for odd_freq.
- If odd_freq is odd, then check if (odd_freq + even_freq – 1) is ? N or not. If found to be true, print “Yes“.
- If odd_freq is even, then check if (odd_freq + even_freq) is ? N or not. If found to be true, print “Yes“.
- If none of the above conditions satisfy, print “No”.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool checkEvenSum( int arr[], int N, int size)
{
int even_freq = 0, odd_freq = 0;
for ( int i = 0; i < size; i++) {
if (arr[i] & 1)
odd_freq++;
else
even_freq++;
}
if (even_freq >= N)
return true ;
else {
if (odd_freq & 1) {
int taken = odd_freq - 1;
int req = N - taken;
if (even_freq < req) {
return false ;
}
else
return true ;
}
else {
int taken = odd_freq;
int req = N - taken;
if (even_freq < req) {
return false ;
}
else
return true ;
}
}
return false ;
}
int main()
{
int arr[] = { 9, 2, 3, 4, 18, 7, 7, 6 };
int size = sizeof (arr) / sizeof (arr[0]);
int N = 5;
if (checkEvenSum(arr, N, size))
cout << "Yes" << endl;
else
cout << "No" << endl;
}
|
Java
import java.util.*;
class GFG{
static boolean checkEvenSum( int arr[],
int N, int size)
{
int even_freq = 0 , odd_freq = 0 ;
for ( int i = 0 ; i < size; i++)
{
if (arr[i] % 2 == 1 )
odd_freq++;
else
even_freq++;
}
if (even_freq >= N)
return true ;
else
{
if (odd_freq % 2 == 1 )
{
int taken = odd_freq - 1 ;
int req = N - taken;
if (even_freq < req)
{
return false ;
}
else
return true ;
}
else
{
int taken = odd_freq;
int req = N - taken;
if (even_freq < req)
{
return false ;
}
else
return true ;
}
}
}
public static void main(String[] args)
{
int arr[] = { 9 , 2 , 3 , 4 , 18 , 7 , 7 , 6 };
int size = arr.length;
int N = 5 ;
if (checkEvenSum(arr, N, size))
System.out.print( "Yes" + "\n" );
else
System.out.print( "No" + "\n" );
}
}
|
Python3
def checkEvenSum(arr, N, size):
even_freq , odd_freq = 0 , 0
for i in range (size):
if (arr[i] & 1 ):
odd_freq + = 1
else :
even_freq + = 1
if (even_freq > = N):
return True
else :
if (odd_freq & 1 ):
taken = odd_freq - 1
req = N - taken
if (even_freq < req):
return False
else :
return True
else :
taken = odd_freq
req = N - taken
if (even_freq < req):
return False
else :
return True
return False
if __name__ = = "__main__" :
arr = [ 9 , 2 , 3 , 4 , 18 , 7 , 7 , 6 ]
size = len (arr)
N = 5
if (checkEvenSum(arr, N, size)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG{
static bool checkEvenSum( int []arr,
int N, int size)
{
int even_freq = 0, odd_freq = 0;
for ( int i = 0; i < size; i++)
{
if (arr[i] % 2 == 1)
odd_freq++;
else
even_freq++;
}
if (even_freq >= N)
return true ;
else
{
if (odd_freq % 2 == 1)
{
int taken = odd_freq - 1;
int req = N - taken;
if (even_freq < req)
{
return false ;
}
else
return true ;
}
else
{
int taken = odd_freq;
int req = N - taken;
if (even_freq < req)
{
return false ;
}
else
return true ;
}
}
}
public static void Main(String[] args)
{
int []arr = { 9, 2, 3, 4, 18, 7, 7, 6 };
int size = arr.Length;
int N = 5;
if (checkEvenSum(arr, N, size))
Console.Write( "Yes" + "\n" );
else
Console.Write( "No" + "\n" );
}
}
|
Javascript
<script>
function checkEvenSum(arr, N, size)
{
var even_freq = 0, odd_freq = 0;
for ( var i = 0; i < size; i++)
{
if (arr[i] & 1)
odd_freq++;
else
even_freq++;
}
if (even_freq >= N)
return true ;
else
{
if (odd_freq & 1)
{
var taken = odd_freq - 1;
var req = N - taken;
if (even_freq < req)
{
return false ;
}
else
return true ;
}
else
{
var taken = odd_freq;
var req = N - taken;
if (even_freq < req)
{
return false ;
}
else
return true ;
}
}
return false ;
}
var arr = [ 9, 2, 3, 4, 18, 7, 7, 6 ];
var size = arr.length;
var N = 5;
if (checkEvenSum(arr, N, size))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)