JavaScript 实现 LeetCode 移除最低工资与最高工资后的平均值计算

作者:拾光

时间:2026-10-26

浏览:472

本文详细解析 LeetCode 中移除最低工资和最高工资后计算剩余员工平均工资的问题。文章提供了两种 JavaScript 实现方案:第一种通过数组排序定位极值并遍历累加,逻辑直观但时间复杂度较高;第二种利用 Math.max/min 结合 splice 移除极值后求和,内存消耗相对较少。文中包含完整代码示例、复杂度分析及示例解释,帮助开发者理解不同实现路径的优劣。

文章目录

题目描述

题目来源:leetcode.cn/

  • 给定一个整数数组 salary,其中每个元素均为唯一值。数组中的 salary[i] 代表第 i 位员工的薪资数据。
  • 要求计算在剔除数组中的最低薪资和最高薪资后,剩余所有员工薪资的平均值。

示例说明

示例 1:

输入:salary = [4000,3000,1000,2000]

输出:2500.00000

解析:该数组中最低薪资为 1000,最高薪资为 4000。剔除这两个值后,剩余薪资为 2000 和 3000,其平均值为 (2000 + 3000) / 2 = 2500。

示例 2:

输入:salary = [1000,2000,3000]

输出:2000.00000

解析:最低薪资为 1000,最高薪资为 3000。剔除后仅剩 2000,平均值为 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 范围内即视为正确。

代码实现

function average(salary: number[]): number {
    let sortSalary = salary.sort((a, b) => { return a - b; });
    let sum = 0;
    for(let i = 1; i < sortSalary.length - 1; i++){
        sum += sortSalary[i];
    }
    return sum / (sortSalary.length - 2);
};
  • 方案一:排序法。首先对原数组进行升序排序,排序后最小值位于索引 0,最大值位于索引 length-1。
  • 接着遍历排序后的数组,从索引 1 开始至 length-2 结束(即排除首尾两个元素),将中间所有元素累加求和。
  • 最后,将累加总和除以有效元素的个数并返回结果。有效元素个数为原数组长度减去被剔除的首尾两项,即 length - 2。
  • 该方法虽然逻辑简单,但由于涉及排序操作,时间复杂度较高,整体性能受排序算法耗时影响。
function average(salary: number[]): number {
    let max = Math.max(...salary);
    let min = Math.min(...salary);
    salary.splice(salary.indexOf(max), 1);
    salary.splice(salary.indexOf(min), 1);
    let sum = salary.reduce((next, pre) => {
        return next + pre
    }, 0)
    return sum / salary.length
};

方案二:极值查找与移除法。

  • 首先利用 Math.max 和 Math.min 函数分别找出数组中的最大值和最小值。
  • 随后使用数组方法 splice 将找到的最大值和最小值从原数组中移除。需要注意的是,splice方法改变原数组的长度。
  • 接着调用数组的 reduce 方法对移除极值后的剩余数组元素进行求和计算。
  • 最后,将求和结果除以剩余数组的长度,得到平均值并返回。
  • 此方案的时间消耗与排序法相近,但在内存使用方面相对节省。

以上为 JavaScript 解决 LeetCode 移除最低工资与最高工资后计算平均工资问题的详细解析,更多相关 JS 算法题解及资料请参阅本站其他文章。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章