Просечна плата искључујући решење минималне и максималне зараде Леетцоде


Ниво тешкоће Лако
Често питани у НетСуите
ЛеетЦоде

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

У проблему ” Просек Плата без минималне и максималне зараде “добијамо низ зарада. где сваки елемент у низу представља плату различитих запослених. Свака вредност у низу је јединствена.

Наш задатак је да израчунамо просечну плату запосленог без минималне и максималне зараде.

Пример

Salary= [8000,9000,2000,3000,6000,1000]
4750.0

objašnjenje:

Просечна плата искључујући решење минималне и максималне зараде Леетцоде

У датом низу зарада 9000 је максимална зарада, а 1000 минимална зарада. Као што морамо да пронађемо просечну плату без минимум и максимум плата, тако да ове вредности нећемо додавати укупном збиру. Укупан збир је 19000, тако да је просек 19000/4, односно 4750.

Приступ

Ово је основни математички проблем. Наш задатак је да пронађемо минималну и максималну плату, а затим и просек преостале зараде. Пратићемо ове кораке:

  1. Иницијализујте минималну зараду са ИНТ_МАКС, а максималну са ИНТ_МИН. Користићемо променљиву за чување износа зараде, па је иницијализујте са 0.
  2. Пређите низ и додајте сваку плату збиру. У међувремену, ажурирајте и вредност минималне и максималне зараде.
  3. Ако је вредност н мања од три, тада ће просечна зарада бити нула, иначе ће просечна зарада бити (укупна зарада-минимална зарада-максимална зарада) / (н-2).
  4. Помножићемо (н-2) са 1.0, јер просечна зарада може бити двострука вредност.

Код за просечну плату искључујући решење минималне и максималне плате са Леетцоде-ом

Ц ++ код

#include <bits/stdc++.h> 
using namespace std; 
       double average(vector<int>& salary) {
        int n=salary.size();
        int mn=INT_MAX,mx=INT_MIN,sum=0;
        for(int i=0;i<n;i++)
        {
            sum=sum+salary[i];
            mn=min(mn,salary[i]);
            mx=max(mx,salary[i]);
        }
        double ans=(sum-mn-mx)/((n-2)*1.0);
        if(n>2)
            return ans;
        else 
            return 0;
    }
int main() 
{ 
 vector<int> arr = {8000,9000,2000,3000,6000,1000}; 
 cout<<average(arr)<<endl; 
 return 0;
}
4750.0

Јава код

import java.util.Arrays; 
public class Tutorialcup {
        public static double average(int[] salary) {
        int n=salary.length;
        int mn=Integer.MAX_VALUE,mx=Integer.MIN_VALUE,sum=0;
        for(int i=0;i<n;i++)
        {
            sum=sum+salary[i];
            mn=Math.min(mn,salary[i]);
            mx=Math.max(mx,salary[i]);
        }
        double ans=(sum-mn-mx)/((n-2)*1.0);
        if(n>2)
            return ans;
        else 
            return 0;
    }
  public static void main(String[] args) {
    int [] arr = {8000,9000,2000,3000,6000,1000}; 
    double ans=  average(arr);
    System.out.println(ans);
  }
}
4750.0

Анализа сложености просечне зараде искључујући решење минималне и максималне зараде Леетцоде

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

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

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

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

Референце