# Average of remaining elements after removing K largest and K smallest elements from array

Given an array of N integers. The task is to find the average of the numbers after removing k largest elements and k smallest element from the array i.e. calculate the average value of the remaining N – 2K elements.

Examples:

```Input: arr = [1, 2, 4, 4, 5, 6], K = 2
Output: 4
Remove 2 smallest elemnts i.e. 1 and 2
Remove 2 largest elements i.e. 5 and 6
Remaining elements are 4, 4. So average of 4, 4 is 4.

Input: arr = [1, 2, 3], K = 3
Output: 0
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• If no. of elements to be removed is greater than no. of elements present in the array, then ans = 0.
• Else, Sort all the elements of the array. Then, calculate average of elements from Kth index to n-k-1th index.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find average ` `double` `average(``int` `arr[], ``int` `n, ``int` `k) ` `{ ` `    ``double` `total = 0; ` ` `  `    ``// base case if 2*k>=n ` `    ``// means all element get removed ` `    ``if` `(2 * k >= n) ` `        ``return` `0; ` ` `  `    ``// first sort all elements ` `    ``sort(arr, arr + n); ` `    ``int` `start = k, end = n - k - 1; ` ` `  `    ``// sum of req number ` `    ``for` `(``int` `i = start; i <= end; i++) ` `        ``total += arr[i]; ` ` `  `    ``// find average ` `    ``return` `(total / (n - 2 * k)); ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 1, 2, 4, 4, 5, 6 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]); ` `    ``int` `k = 2; ` ` `  `    ``cout << average(arr, n, k) << endl; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the above approach ` ` `  `import` `java.io.*; ` `import` `java.util.*; ` `class` `GFG { ` ` `  `// Function to find average ` `static` `double` `average(``int` `arr[], ``int` `n, ``int` `k) ` `{ ` `    ``double` `total = ``0``; ` ` `  `    ``// base case if 2*k>=n ` `    ``// means all element get removed ` `    ``if` `(``2` `* k >= n) ` `        ``return` `0``; ` ` `  `    ``// first sort all elements ` `    ``Arrays.sort(arr); ` `    ``int` `start = k, end = n - k - ``1``; ` ` `  `    ``// sum of req number ` `    ``for` `(``int` `i = start; i <= end; i++) ` `        ``total += arr[i]; ` ` `  `    ``// find average ` `    ``return` `(total / (n - ``2` `* k)); ` `} ` ` `  `// Driver code ` ` `  ` `  `    ``public` `static` `void` `main (String[] args) { ` `            ``int` `arr[] = { ``1``, ``2``, ``4``, ``4``, ``5``, ``6` `}; ` `    ``int` `n = arr.length; ` `    ``int` `k = ``2``; ` ` `  `    ``System.out.println( average(arr, n, k)); ` `     `  `} ` `} ` `// This code is contributed by anuj_67.. `

## Python3

 `# Python3 implementation of the  ` `# above approach  ` ` `  `# Function to find average  ` `def` `average(arr, n, k) : ` `    ``total ``=` `0` ` `  `    ``# base case if 2*k>=n  ` `    ``# means all element get removed  ` `    ``if` `(``2` `*` `k >``=` `n) : ` `        ``return` `0` ` `  `    ``# first sort all elements  ` `    ``arr.sort() ` `     `  `    ``start , end ``=` `k , n ``-` `k ``-` `1` ` `  `    ``# sum of req number  ` `    ``for` `i ``in` `range``(start, end ``+` `1``) : ` `        ``total ``+``=` `arr[i]  ` ` `  `    ``# find average  ` `    ``return` `(total ``/` `(n ``-` `2` `*` `k)) ` ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``arr ``=` `[ ``1``, ``2``, ``4``, ``4``, ``5``, ``6` `]  ` `    ``n ``=` `len``(arr) ` `    ``k ``=` `2` ` `  `    ``print``(average(arr, n, k))  ` ` `  `# This code is contributed by Ryuga `

## C#

 `// C# implementation of the above approach ` ` `  `using` `System;  ` `public` `class` `GFG { ` `  `  `    ``// Function to find average ` `    ``static` `double` `average(``int` `[]arr, ``int` `n, ``int` `k) ` `    ``{ ` `        ``double` `total = 0; ` ` `  `        ``// base case if 2*k>=n ` `        ``// means all element get removed ` `        ``if` `(2 * k >= n) ` `            ``return` `0; ` ` `  `        ``// first sort all elements ` `        ``Array.Sort(arr); ` `        ``int` `start = k, end = n - k - 1; ` ` `  `        ``// sum of req number ` `        ``for` `(``int` `i = start; i <= end; i++) ` `            ``total += arr[i]; ` ` `  `        ``// find average ` `        ``return` `(total / (n - 2 * k)); ` `    ``} ` ` `  `    ``// Driver code ` ` `  ` `  `        ``public` `static` `void` `Main() { ` `                ``int` `[]arr = { 1, 2, 4, 4, 5, 6 }; ` `        ``int` `n = arr.Length; ` `        ``int` `k = 2; ` ` `  `        ``Console.WriteLine( average(arr, n, k)); ` ` `  `    ``} ` `} ` `//This code is contributed by 29AjayKumar `

## PHP

 `=n  ` `    ``// means all element get removed  ` `    ``if` `(2 * ``\$k` `>= ``\$n``)  ` `        ``return` `0;  ` ` `  `    ``// first sort all elements  ` `    ``sort(``\$arr``) ; ` `     `  `    ``\$start` `= ``\$k` `; ` `    ``\$end` `= ``\$n` `- ``\$k` `- 1;  ` ` `  `    ``// sum of req number  ` `    ``for` `(``\$i` `= ``\$start``; ``\$i` `<= ``\$end``; ``\$i``++)  ` `        ``\$total` `+= ``\$arr``[``\$i``];  ` ` `  `    ``// find average  ` `    ``return` `(``\$total` `/ (``\$n` `- 2 * ``\$k``));  ` `}  ` ` `  `// Driver code  ` `\$arr` `= ``array``(1, 2, 4, 4, 5, 6);  ` `\$n` `= sizeof(``\$arr``); ` `\$k` `= 2;  ` ` `  `echo` `average(``\$arr``, ``\$n``, ``\$k``); ` ` `  `// This code is contributed by Ryuga ` `?> `

Output:

```4
```

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.