Средња вредност низа након уклањања неких елемената Решење са кодом


Ниво тешкоће Лако
Често питани у гоогле
Ред

Изјава о проблему

У проблему „Просек низа након уклањања неких елемената“ добијамо низ. Сви елементи низа су позитивни цели бројеви. Величина низа је вишеструка од 20.

Наш задатак је да пронађемо средину низа искључујући најмањих 5% елемената и највиших 5% елемената.

Пример

arr = [6,2,7,5,1,2,0,3,10,2,5,0,5,5,0,8,7,6,8,0]
4.000000

objašnjenje:

Средња вредност низа након уклањања неких елемената Решење са кодом

Слика приказује дати низ након сортирања. Након уклањања највиших и најнижих 5% елемената, збир преосталог елемента је 172, а укупан број преосталих елемената 36. Дакле, средња вредност постаје 4.77778.

Приступ средњој вредности низа након уклањања неких елемената решење са кодом

Ово је лак проблем имплементације. Следе кораци за решавање овог проблема:

  1. Сортирај дати низ јер треба да исечемо највише и најмање 5% елемената из низа.
  2. Дужину низа сачувајте у променљивој.
  3. Објави две променљиве:
    1. За чување збира елемената.
    2. За чување броја елемената између.
  4. Сада покрените петљу и пронађите збир обрезаних елемената.
    1. За ово ћемо иницијализовати петљу са н * 0.05 где је н дужина датог низа и петља ће се изводити до н * 0.95.
  5. Израчунајте просек.
    1.  Овде је важно напоменути да треба да врати двоструку вредност, а не целу вредност.

Имплементација

Ц ++ код за средину низа након уклањања неких елемената

#include <bits/stdc++.h> 
using namespace std; 
    double trimMean(vector<int>& arr) {
        sort(arr.begin(),arr.end());
        int n=arr.size();
        double sum=0,cnt=0;
        for(int i=(n*.05);i<n*.95;i++)
        { 
            sum+=arr[i];
            cnt++;
        }
        return sum/cnt;      
    }
int main() 
{ 
 vector<int> arr = {6,0,7,0,7,5,7,8,3,4,0,7,8,1,6,8,1,1,2,4,8,1,9,5,4,3,8,5,10,8,6,6,1,0,6,10,8,2,3,4}; 
 double ans=trimMean(arr);
 cout<<ans<<endl;
 return 0;
}
4.77778

Јава код за Просек низа након уклањања неких елемената

import java.util.Arrays; 
public class Tutorialcup {
    public static double trimMean(int[] arr) {
     Arrays.sort(arr);
     int n = arr.length;   
     double sum = 0d,cnt=0; 
     for(int i=n / 20;i<n - n / 20;i++)
        { 
            sum+=arr[i];
            cnt++;
        }
        return sum/cnt; 
    }
  public static void main(String[] args) {
        int [] arr = {6,0,7,0,7,5,7,8,3,4,0,7,8,1,6,8,1,1,2,4,8,1,9,5,4,3,8,5,10,8,6,6,1,0,6,10,8,2,3,4}; 
        double ans=trimMean(arr); 
        System.out.println(ans);
  }
}
4.77778

Анализа сложености средње вредности низа након уклањања неких елемената Леетцоде решење

Временска сложеност

Временска сложеност горњег кода је О (нлогн) јер сортирамо дати низ. Овде је н дужина датог низа.

Свемирска сложеност

Сложеност простора горњег кода је О (1) јер користимо само променљиву за чување одговора.

Референце