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 elements 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

Approach:



Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the above approach
#include <bits/stdc++.h>
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;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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..
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// Php implementation of the 
// above approach 
  
// Function to find average 
function 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 
    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
?>
chevron_right

Output:
4



Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :