Difference between sum of K maximum even and odd array elements
Last Updated :
18 Jan, 2022
Given an array arr[] and a number K, the task is to find the absolute difference of the sum of K maximum even and odd array elements.
Note: At least K even and odd elements are present in the array respectively.
Examples:
Input arr[] = {1, 2, 3, 4, 5, 6}, K = 2
Output: 2
Explanation:
The 2 maximum even numbers are 6, 4. The sum is 6 + 4 = 10.
The 2 maximum odd numbers are 5, 3. The sum is 5 + 3 = 8.
Difference = 10 – 8 = 2.
Input arr[] = {1, 8, 4, 5, 6, 3}, K = 3
Output: 4
Explanation:
The 3 maximum even numbers are 8, 6, 4. The sum is 8 + 6 + 4 = 18.
The 3 maximum odd numbers are 5, 3, 1. The sum is 5 + 3 + 1 = 9.
Difference = 18 – 9 = 9.
Naive Approach: The simplest approach is to find the K maximum even numbers and K maximum odd numbers by traversing the array and print the absolute difference between the sum of the K maximum even and odd elements obtained.
Time Complexity: O(N*K)
Auxiliary Space: O(1)
Efficient Approach: To optimize the above approach, the idea is to use the concept of segregate the array into odd and even numbers and then sort the array into two parts in descending order containing even and odd numbers respectively. Follow the steps below to solve the problem:
- Segregate even number and odd number in the given array respectively and store the index from where odd numbers start.
- Let the index from where the odd numbers start to be K. Sort the number in the range [0, K – 1] and [K, N – 1] in decreasing order.
- The sum of the first K numbers from the start of the array and from the point where odd numbers start is the sum first K maximum even and odd numbers in the array respectively.
- Print the absolute difference between the sums calculated in the above step as the result.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void evenOddDiff( int a[], int n, int k)
{
int j = -1;
for ( int i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
j++;
swap(a[i], a[j]);
}
}
j++;
sort(a, a + j, greater< int >());
sort(a + j, a + n, greater< int >());
int evenSum = 0, oddSum = 0;
for ( int i = 0; i < k; i++) {
evenSum += a[i];
}
for ( int i = j; i < (j + k); i++) {
oddSum += a[i];
}
cout << abs (evenSum - oddSum);
}
int main()
{
int arr[] = { 1, 8, 3, 4, 5 };
int N = sizeof (arr) / sizeof (arr[0]);
int K = 2;
evenOddDiff(arr, N, K);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void evenOddDiff( int a[], int n, int k)
{
int j = - 1 ;
Vector<Integer> even = new Vector<>();
Vector<Integer> odd = new Vector<>();
for ( int i = 0 ; i < n; i++)
{
if (a[i] % 2 == 0 )
{
even.add(a[i]);
}
else
odd.add(a[i]);
}
j++;
Collections.sort(even);
Collections.reverse(even);
Collections.sort(odd);
Collections.reverse(odd);
int evenSum = 0 , oddSum = 0 ;
for ( int i = 0 ; i < k; i++)
{
evenSum += even.get(i);
}
for ( int i = 0 ; i < k; i++)
{
oddSum += odd.get(i);
}
System.out.print(Math.abs(evenSum - oddSum));
}
public static void main(String[] args)
{
int arr[] = { 1 , 8 , 3 , 4 , 5 };
int N = arr.length;
int K = 2 ;
evenOddDiff(arr, N, K);
}
}
|
Python3
def evenOddDiff(a, n, k) :
j = - 1
even = []
odd = []
for i in range (n) :
if (a[i] % 2 = = 0 ) :
even.append(a[i])
else :
odd.append(a[i])
j + = 1
even.sort()
even.reverse()
odd.sort()
odd.reverse()
evenSum, oddSum = 0 , 0
for i in range (k) :
evenSum + = even[i]
for i in range (k) :
oddSum + = odd[i]
print ( abs (evenSum - oddSum))
arr = [ 1 , 8 , 3 , 4 , 5 ]
N = len (arr)
K = 2
evenOddDiff(arr, N, K)
|
C#
using System;
using System.Collections.Generic;
class GFG{
static void evenOddDiff( int []a, int n,
int k)
{
int j = -1;
List< int > even = new List< int >();
List< int > odd = new List< int >();
for ( int i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
{
even.Add(a[i]);
}
else
odd.Add(a[i]);
}
j++;
even.Sort();
even.Reverse();
odd.Sort();
odd.Reverse();
int evenSum = 0, oddSum = 0;
for ( int i = 0; i < k; i++)
{
evenSum += even[i];
}
for ( int i = 0; i < k; i++)
{
oddSum += odd[i];
}
Console.Write(Math.Abs(evenSum - oddSum));
}
public static void Main(String[] args)
{
int []arr = { 1, 8, 3, 4, 5 };
int N = arr.Length;
int K = 2;
evenOddDiff(arr, N, K);
}
}
|
Javascript
<script>
function evenOddDiff(a , n , k) {
var j = -1;
var even = [];
var odd = [];
for (i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
even.push(a[i]);
} else
odd.push(a[i]);
}
j++;
even.sort((a,b)=>a-b);
even.reverse(even);
odd.sort((a,b)=>a-b);;
odd.reverse();
var evenSum = 0, oddSum = 0;
for (i = 0; i < k; i++) {
evenSum += even[i];
}
for (i = 0; i < k; i++) {
oddSum += odd[i];
}
document.write(Math.abs(evenSum - oddSum));
}
var arr = [ 1, 8, 3, 4, 5 ];
var N = arr.length;
var K = 2;
evenOddDiff(arr, N, K);
</script>
|
Time Complexity: O(N*log N + K)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...