跳至主要內容

1491. 去掉最低工资和最高工资后的工资平均值


1491. 去掉最低工资和最高工资后的工资平均值

🟢   🔖  数组 排序  🔗 力扣open in new window LeetCodeopen in new window

题目

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 以内的结果都将视为正确答案。

解题思路

可以通过一次遍历同时计算总和、最小值和最大值,从而优化效率。

  1. 初始化 sum0min 为正无穷大,max 为负无穷大。
  2. 遍历 salary 数组:
    • 更新 minmax 的值。
    • 累加当前元素到 sum
  3. 计算平均值:从总和中减去 minmax,然后除以 salary.length - 2
  4. 返回结果。

复杂度分析

  • 时间复杂度: 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);
};