1491. Average Salary Excluding the Minimum and Maximum Salary
leetcode easy
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/originalpublic 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/originalclass 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/originalfunc 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 для точности.
😎