Средна заплата с изключение на минималното и максималното решение на Leetcode за заплата


Ниво на трудност Лесно
Често задавани в NetSuite
LeetCode

Изявление на проблема

В проблема ” Средно аритметично Заплата с изключение на минималната и максималната заплата ”получаваме масив от заплати. където всеки елемент в масива представлява заплатата на различните служители. Всяка стойност в масива е уникална.

Нашата задача е да изчислим средната заплата на служителя, като изключим минималната и максималната заплата.

Пример

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

Обяснение:

Средна заплата с изключение на минималното и максималното решение на Leetcode за заплата

В дадения масив от заплати 9000 е максималната заплата и 1000 е минималната заплата. Тъй като трябва да намерим средната заплата без минимум и максимум заплата, така че няма да добавяме тези стойности към общата сума. Общата сума е 19000, така че средната стойност е 19000/4, което е 4750.

Подход

Това е основен математически проблем. Нашата задача е да намерим минималната и максималната заплата, след това да намерим средната стойност на останалата заплата. Ще следваме тези стъпки:

  1. Инициализирайте минималната заплата с INT_MAX, максималната заплата с INT_MIN. Ще използваме променлива за съхраняване на сумата на заплатата, така че я инициализирайте с 0.
  2. Преминете масива и добавете всяка заплата към сумата. Междувременно актуализирайте и стойността на минималната и максималната заплата.
  3. Ако стойността на n е по-малка от три, тогава средната заплата ще бъде нула, иначе средната заплата ще бъде (обща заплата - минималната заплата - максималната заплата) / (n-2).
  4. Ще умножим (n-2) с 1.0, защото средната заплата може да бъде двойна стойност.

Код за средна заплата, с изключение на решението за минимална и максимална заплата Leetcode

C ++ код

#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

Java код

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

Анализ на сложността на средната заплата, с изключение на решението за минимална и максимална заплата Leetcode

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

Сложността във времето на горния код е О (п) защото обхождаме масива на заплатите само веднъж. Тук n е дължината на масива от заплати.

Космическа сложност

Сложността на пространството на горния код е O (1) защото използваме само променлива за съхраняване на отговор.

Препратки