1491. 去掉最低工资和最高工资后的工资平均值
1491. 去掉最低工资和最高工资后的工资平均值
题目
You are given an array of unique integers salary
where salary[i]
is the salary of the ith
employee.
Return the average salary of employees excluding the minimum and maximum salary. Answers within 10-5
of the actual answer will be accepted.
Example 1:
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
Example 2:
Input: salary = [1000,2000,3000]
Output: 2000.00000
Explanation: Minimum salary and maximum salary are 1000 and 3000 respectively.
Average salary excluding minimum and maximum salary is (2000) / 1 = 2000
Constraints:
3 <= salary.length <= 100
1000 <= salary[i] <= 10^6
- All the integers of
salary
are unique.
题目大意
给你一个整数数组 salary
,数组里每个数都是 唯一 的,其中 salary[i]
是第 i
个员工的工资。
请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。
示例 1:
输入: salary = [4000,3000,1000,2000]
输出: 2500.00000
解释: 最低工资和最高工资分别是 1000 和 4000 。
去掉最低工资和最高工资以后的平均工资是 (2000+3000)/2= 2500
示例 2:
输入: salary = [1000,2000,3000]
输出: 2000.00000
解释: 最低工资和最高工资分别是 1000 和 3000 。
去掉最低工资和最高工资以后的平均工资是 (2000)/1= 2000
示例 3:
输入: salary = [6000,5000,4000,3000,2000,1000]
输出: 3500.00000
示例 4:
输入: salary = [8000,9000,2000,3000,6000,1000]
输出: 4750.00000
提示:
3 <= salary.length <= 100
10^3 <= salary[i] <= 10^6
salary[i]
是唯一的。- 与真实值误差在
10^-5
以内的结果都将视为正确答案。
解题思路
可以通过一次遍历同时计算总和、最小值和最大值,从而优化效率。
- 初始化
sum
为0
,min
为正无穷大,max
为负无穷大。 - 遍历
salary
数组:- 更新
min
和max
的值。 - 累加当前元素到
sum
。
- 更新
- 计算平均值:从总和中减去
min
和max
,然后除以salary.length - 2
。 - 返回结果。
复杂度分析
- 时间复杂度:
O(n)
,需要遍历整个数组一次。 - 空间复杂度:
O(1)
,只使用常量级变量,无额外空间消耗。
代码
/**
* @param {number[]} salary
* @return {number}
*/
var average = function (salary) {
let sum = 0;
let min = Infinity;
let max = -Infinity;
for (let num of salary) {
if (num > max) {
max = num;
}
if (num < min) {
min = num;
}
sum += num;
}
return (sum - min - max) / (salary.length - 2);
};