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 <= 1001000 <= salary[i] <= 10^6- All the integers of
salaryare 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 <= 10010^3 <= salary[i] <= 10^6salary[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);
};
