You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode题目:排除最值的平均薪资计算及代码实现疑问

问题描述

给定一个由唯一整数组成的数组salary,其中salary[i]表示第i位员工的薪资。请返回排除最高和最低薪资后的员工平均薪资。答案与实际值误差在10^-5以内均会被接受。

我的思路与代码

我原本想从let sal = salary[0]开始,把其他薪资和salary[0]比较,把更小的薪资推入新数组,但不知道怎么分离出最低薪资,也不清楚怎么完成整个问题。以下是我的代码:

/**
* @param {number[]} salary
* @return {number}
*/
var average = function(salary) {
    let sal = salary[0]
    for(let i = 1; i < salary.length; i++){
        if (sal > salary[i]) {
            salary.map()
        }
    }
 

};
解决方案

这里有两种简单高效的实现方式:

方法一:遍历一次求总和、最大、最小值

不用排序,一次遍历就能拿到所需数据,时间复杂度O(n),效率更高:

var average = function(salary) {
    let sum = 0;
    let min = Infinity;
    let max = -Infinity;
    for(let num of salary){
        sum += num;
        // 更新最小值
        if(num < min) min = num;
        // 更新最大值
        if(num > max) max = num;
    }
    // 总和减去最大和最小值,再除以剩余员工数(原长度减2)
    return (sum - min - max) / (salary.length - 2);
};

方法二:排序后截取计算

先排序数组,去掉首尾的最小和最大值,再计算剩余元素的平均值:

var average = function(salary) {
    // 按升序排序数组
    salary.sort((a, b) => a - b);
    let sum = 0;
    // 从索引1遍历到倒数第二个元素(跳过首尾)
    for(let i = 1; i < salary.length - 1; i++){
        sum += salary[i];
    }
    return sum / (salary.length - 2);
};

说明

  • 题目明确数组元素是唯一整数,所以无需处理重复的最大/最小值;
  • 方法一的效率优于方法二,推荐使用;
  • 两种方法计算出的结果都能满足误差要求。

内容的提问来源于stack exchange,提问作者joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:22:04