📌  相关文章
📜  从数组中删除K个最大和K个最小元素后剩余元素的平均值

📅  最后修改于: 2021-04-22 01:47:49             🧑  作者: Mango

给定一个由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