- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Maximum difference between the group of k-elements and rest of the array in C
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=
Approach used in the below program is as follows
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.
Example
#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; }
Output
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
- Related Articles
- Count maximum elements of an array whose absolute difference does not exceed K in C++
- Find k maximum elements of array in original order in C++
- Maximum possible middle element of the array after deleting exactly k elements in C++
- Sort elements of the array that occurs in between multiples of K in C++
- Maximum difference between two subsets of m elements in C
- Group a sorted array based on the difference between current and previous elements in JavaScript
- Product of all Subsequences of size K except the minimum and maximum Elements in C++
- Maximum subarray sum by flipping signs of at most K array elements in C++
- Maximum difference between first and last indexes of an element in array in C
- Maximum value K such that array has at-least K elements that are >= K in C++
- Maximum sum of difference of adjacent elements in C++
- Find maximum difference between nearest left and right smaller elements in C++
- Find integers that divides maximum number of elements of the array in C++
- JavaScript - Constructs a new array whose elements are the difference between consecutive elements of the input array
- Maximize the median of the given array after adding K elements to the same array in C++
