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:
- 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++
#include <bits/stdc++.h>
using namespace std;
double average( int arr[], int n, int k)
{
double total = 0;
if (2 * k >= n)
return 0;
sort(arr, arr + n);
int start = k, end = n - k - 1;
for ( int i = start; i <= end; i++)
total += arr[i];
return (total / (n - 2 * k));
}
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
import java.io.*;
import java.util.*;
class GFG {
static double average( int arr[], int n, int k)
{
double total = 0 ;
if ( 2 * k >= n)
return 0 ;
Arrays.sort(arr);
int start = k, end = n - k - 1 ;
for ( int i = start; i <= end; i++)
total += arr[i];
return (total / (n - 2 * k));
}
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));
}
}
|
Python3
def average(arr, n, k) :
total = 0
if ( 2 * k > = n) :
return 0
arr.sort()
start , end = k , n - k - 1
for i in range (start, end + 1 ) :
total + = arr[i]
return (total / (n - 2 * k))
if __name__ = = "__main__" :
arr = [ 1 , 2 , 4 , 4 , 5 , 6 ]
n = len (arr)
k = 2
print (average(arr, n, k))
|
C#
using System;
public class GFG {
static double average( int []arr, int n, int k)
{
double total = 0;
if (2 * k >= n)
return 0;
Array.Sort(arr);
int start = k, end = n - k - 1;
for ( int i = start; i <= end; i++)
total += arr[i];
return (total / (n - 2 * k));
}
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));
}
}
|
PHP
<?php
function average( $arr , $n , $k )
{
$total = 0;
if (2 * $k >= $n )
return 0;
sort( $arr ) ;
$start = $k ;
$end = $n - $k - 1;
for ( $i = $start ; $i <= $end ; $i ++)
$total += $arr [ $i ];
return ( $total / ( $n - 2 * $k ));
}
$arr = array (1, 2, 4, 4, 5, 6);
$n = sizeof( $arr );
$k = 2;
echo average( $arr , $n , $k );
?>
|
Javascript
<script>
function average(arr, n, k)
{
var total = 0;
if (2 * k >= n)
return 0;
arr.sort();
var start = k, end = n - k - 1;
for (i = start; i <= end; i++)
total += arr[i];
return (total / (n - 2 * k));
}
var arr = [ 1, 2, 4, 4, 5, 6 ];
var n = arr.length;
var k = 2;
document.write(average(arr, n, k));
</script>
|
Time Complexity: O(n log n)
Auxiliary Space: O(1)
Last Updated :
03 Oct, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...