Mean of given array after removal of K percent of smallest and largest array elements
Last Updated :
11 Jul, 2022
Given an array arr[] and an integer K, the task is to remove K % percent array elements from the smallest and largest array elements and calculate the mean of the remaining array.
Examples:
Input: arr[] = {6, 2, 7, 5, 1, 2, 0, 3, 10, 2, 5, 0, 5, 5, 0, 8, 7, 6, 8, 0}, K = 5
Output: 4.00000
Explanation:
There are 20 elements in the array. Therefore, 5% of 20 is 1. Therefore, 1 of the smallest elements (i.e. 0) is removed and 1 element of the largest elements (i.e. 0) is removed. Therefore, mean of the remaining array is 18.
Input: arr[] = {6, 0, 7, 0, 7, 5, 7, 8, 3, 4, 0, 7, 8, 1, 6, 8, 1, 1, 2, 4}, K = 10
Output: 4.31250
Approach:
- Sort the array arr[].
- Find the size of the array.
- Calculate the K-th percent of the size of the array.
- Now, add the elements present in the indices K% to (N – 1) – K%.
- Finally, find the mean of those elements.
Below is the implementation of the above approach:
C++14
#include <bits/stdc++.h>
using namespace std;
void meanOfRemainingElements( int arr[],
int N, int K)
{
sort(arr, arr + N);
int kthPercent = (N * K) / 100;
float sum = 0;
for ( int i = 0; i < N; i++)
if (i >= kthPercent && i < (N - kthPercent))
sum += arr[i];
float mean = sum
/ (N - 2 * kthPercent);
cout << fixed << setprecision(5) << mean << endl;
}
int main()
{
int arr[] = { 6, 2, 7, 5, 1, 2, 0, 3, 10, 2,
5, 0, 5, 5, 0, 8, 7, 6, 8, 0 };
int arr_size = sizeof (arr) / sizeof (arr[0]);
int K = 5;
meanOfRemainingElements(arr, arr_size, K);
return 0;
}
|
Java
import java.util.*;
public class GFG
{
static void meanOfRemainingElements( int [] arr, int N,
int K)
{
Arrays.sort(arr);
int kthPercent = (N * K) / 100 ;
float sum = 0f;
for ( int i = 0 ; i < N; i++)
if (i >= kthPercent && i < (N - kthPercent))
sum += arr[i];
float mean = (sum / (N - 2 * kthPercent));
System.out.format( "%.5f" , mean);
}
public static void main(String args[])
{
int [] arr = { 6 , 2 , 7 , 5 , 1 , 2 , 0 , 3 , 10 , 2 ,
5 , 0 , 5 , 5 , 0 , 8 , 7 , 6 , 8 , 0 };
int arr_size = arr.length;
int K = 5 ;
meanOfRemainingElements(arr, arr_size, K);
}
}
|
Python3
def meanOfRemainingElements(arr, N, K):
arr.sort()
kthPercent = (N * K) / 100
sum = 0
for i in range (N):
if (i > = kthPercent and i < (N - kthPercent)):
sum + = arr[i]
mean = sum / (N - 2 * kthPercent)
print ( '%.5f' % mean)
arr = [ 6 , 2 , 7 , 5 , 1 , 2 , 0 , 3 , 10 , 2 , 5 , 0 , 5 , 5 , 0 , 8 , 7 , 6 , 8 , 0 ]
arr_size = len (arr)
K = 5
meanOfRemainingElements(arr, arr_size, K)
|
C#
using System;
class GFG {
static void meanOfRemainingElements( int [] arr, int N,
int K)
{
Array.Sort(arr);
int kthPercent = (N * K) / 100;
float sum = 0f;
for ( int i = 0; i < N; i++)
if (i >= kthPercent && i < (N - kthPercent))
sum += arr[i];
float mean = (sum / (N - 2 * kthPercent));
Console.WriteLine(Math.Round(mean,5));
}
public static void Main()
{
int [] arr = { 6, 2, 7, 5, 1, 2, 0, 3, 10, 2,
5, 0, 5, 5, 0, 8, 7, 6, 8, 0 };
int arr_size = arr.Length;
int K = 5;
meanOfRemainingElements(arr, arr_size, K);
}
}
|
Javascript
<script>
function meanOfRemainingElements( arr, N, K)
{
arr.sort( function (a, b){ return a-b});
let kthPercent = Math.floor((N * K) / 100);
let sum = 0;
for (let i = 0; i < N; i++)
if (i >= kthPercent && i < (N - kthPercent))
sum += arr[i];
let mean = sum
/ (N - 2 * kthPercent);
document.write(mean.toFixed(5));
}
let arr = [ 6, 2, 7, 5, 1, 2, 0, 3, 10, 2,
5, 0, 5, 5, 0, 8, 7, 6, 8, 0 ];
let arr_size = arr.length;
let K = 5;
meanOfRemainingElements(arr, arr_size, K);
</script>
|
Time Complexity: O(N * logN)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...