给定一个由N个整数组成的数组。任务是在从数组中删除k个最大元素和k个最小元素之后,找到数字的平均值,即计算剩余的N – 2K个元素的平均值。
例子:
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
方法:
- 如果不。要删除的元素的数量大于或大于。数组中存在的元素的个数,则ans = 0。
- 否则,对数组的所有元素进行排序。然后,计算从第K个索引到第nk-1个索引的元素的平均值。
下面是上述方法的实现:
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
?>
Javascript
输出:
4