- Related Questions & Answers
- Sort elements of the array that occurs in between multiples of K in C++
- Maximum possible middle element of the array after deleting exactly k elements in C++
- Product of all Subsequences of size K except the minimum and maximum Elements in C++
- Find k maximum elements of array in original order in C++
- Maximum difference between two subsets of m elements in C
- Count maximum elements of an array whose absolute difference does not exceed K in C++
- Group a sorted array based on the difference between current and previous elements in JavaScript
- Maximum sum of difference of adjacent elements in C++
- JavaScript - Constructs a new array whose elements are the difference between consecutive elements of the input array
- What is the difference between rest parameters and the arguments object in Javascript?
- Maximum difference between first and last indexes of an element in array in C
- Difference between REST API and SOAP API
- Find integers that divides maximum number of elements of the array in C++
- How to remove the 0th indexed element in an array and return the rest of the elements in JavaScript?
- Maximize the median of the given array after adding K elements to the same array in C++

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

We are given with an array of integers of size N and a number k. The array consists of integers in random order. The task is to find the maximum difference between the group of k-elements and rest of the array. The array will be divided into two parts. The first part is a group of k-elements taken out and the second part is the rest of the elements of the array. We have to select k elements such that the difference between the sum of elements in both groups is maximum.

If k is smaller (<= half of array size) then smallest k elements will have least sum and rest N-k elements will have largest sum. So the maximum difference is − (sum of rest N-k elements) - (sum of smallest k-elements).

If k is larger (> half of array size) then largest k elements will have the greatest sum and rest N-k elements will have least sum. So the maximum difference is (sum of largest kelements) - (sum of rest N-k elements).

**Input**

Arr[] = { 2,5,6,1,3,2,1,4 }. k=3

**Output** − Maximum difference between the group of k-elements and rest of the array − 16

**Explanation** − Here k is smaller so the least 3 numbers would have the smallest sum.

Least 3 numbers − 1,1,2 sum=4

Rest N-k = 5 numbers: 2,3,4,5,6 sum=20

Maximum difference : 20-4 = 16

**Input**

Arr[] = { 2,2,3,4,8,3,4,4,8,7 }. k=6

**Output** − Maximum difference between the group of k-elements and rest of the array − 25

**Explanation** − Here k is larger so the highest 6 numbers would have the largest sum.

Highest 6 numbers − 8,8,7,4,4,4, sum=35

Rest N-k = 4 numbers − 2,2,3,3 sum=10

Maximum difference − 35-10=

Declare an array of integers which contains in random order.( Arr[] )

Create a variable to store the size of the array. (N)

The function maxKDiff( int Arr[],int n, int k) is used to calculate the maximum difference (maxD) between first and last indexes of an element in an array.

Calculate the sum of whole array and store in arrsum.

First thing is to calculate the sum of least k elements. Using for loop ( i=0;i<k)

If k is smaller then the smallest k elements would have least sum −

In D1 store the abs((sum of whole array) - (2*sum of least k elements)). Twice because array sum also has these elements.

k is larger then the largest k elements would have highest sum −

In D2 store the abs((sum of whole array) - (2*sum of highest k elements)). Twice because array sum also has these elements.

Compare D1 with D2 and store maximum value in maxD.

Return maxD as the result.

#include <stdio.h> #include <math.h> // function for finding maximum group difference of array int maxKDiff (int arr[], int n, int k){ // sum of array int arrsum = 0; int i; for(i=0;i<n;i++) arrsum+=arr[i]; //sum of smallest k int sumk=0; for(i=0;i<k;i++) sumk+=arr[i]; // difference for k-smallest int D1 = abs(arrsum - 2*sumk); //sum of largest k elements sumk=0; int j=0; for(i=n-1;j<4;i--){ sumk+=arr[i]; j++; } // difference for k-largest int D2 = abs(arrsum - 2*sumk); int maxD=D1>=D2?D1:D2; // return maximum difference value return maxD; } // driver program int main(){ int arr[] ={ 2,3,2,10,7,12,8}; int n = 7; int k = 3; sort(arr,n); // to sort array in ascending order printf("Maximum difference between the group of k-elements and rest of the array : %d" , maxKDiff(arr,n,k)); return 0; }

If we run the above code it will generate the following output −

Maximum difference between the group of k-elements and rest of the array : 30

Advertisements