← Static tasks

1491. Average Salary Excluding the Minimum and Maximum Salary

leetcode easy

#array#csharp#easy#leetcode#math

Task

Сложность :

Вам дан массив уникальных целых чисел

salary

, где

salary[i]

— это зарплата i-го сотрудника.

Верните среднюю зарплату сотрудников, исключая минимальную и максимальную зарплату. Ответы, отличающиеся не более чем на 10^-5 от фактического ответа, будут приняты.

Пример:

Input: salary = [4000,3000,1000,2000]

Output: 2500.00000

Explanation: Minimum salary and maximum salary are 1000 and 4000 respectively.

Average salary excluding minimum and maximum salary is (2000+3000) / 2 = 2500

C# solution

matched/original
public class Solution {
    public double Average(int[] salary) {
        int minSalary = int.MaxValue;
        int maxSalary = int.MinValue;
        int sum = 0;
        foreach (int sal in salary) {
            sum += sal;
            minSalary = Math.Min(minSalary, sal);
            maxSalary = Math.Max(maxSalary, sal);
        }
        return (double)(sum - minSalary - maxSalary) / (salary.Length - 2);
    }
}

C++ solution

auto-draft, review before submit
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public double Average(vector<int>& salary) {
        int minSalary = int.MaxValue;
        int maxSalary = int.MinValue;
        int sum = 0;
        foreach (int sal in salary) {
            sum += sal;
            minSalary = min(minSalary, sal);
            maxSalary = max(maxSalary, sal);
        }
        return (double)(sum - minSalary - maxSalary) / (salary.size() - 2);
    }
}

Java solution

matched/original
class Solution {
    public double average(int[] salaries) {
        int minSalary = Integer.MAX_VALUE;
        int maxSalary = Integer.MIN_VALUE;
        int sum = 0;

        for (int salary : salaries) {
            sum += salary;
            minSalary = Math.min(minSalary, salary);
            maxSalary = Math.max(maxSalary, salary);
        }

        return (double)(sum - minSalary - maxSalary) / (double)(salaries.length - 2);
    }
}

Go solution

matched/original
func average(salary []int) float64 {
    minSalary := int(^uint(0) >> 1)
    maxSalary := -minSalary - 1
    sum := 0

    for _, sal := range salary {
        sum += sal
        if sal < minSalary {
            minSalary = sal
        }
        if sal > maxSalary {
            maxSalary = sal
        }
    }

    return float64(sum - minSalary - maxSalary) / float64(len(salary) - 2)
}

Explanation

Algorithm

Инициализация переменных:

Установить minSalary в максимально возможное значение, maxSalary в минимально возможное значение и sum в 0.

Итерация по зарплатам:

Для каждой зарплаты добавить её к переменной sum.

Обновить переменную minSalary, если текущая зарплата меньше её значения.

Обновить переменную maxSalary, если текущая зарплата больше её значения.

Вычисление среднего значения:

Вернуть значение (sum - minSalary - maxSalary) / (N - 2), предварительно преобразовав числитель и знаменатель в double для точности.

😎