JS题解leetcode去掉最低工资和最高工资后的工资平均值

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

JS题解leetcode去掉最低工资和最高工资后的工资平均值

外语狂魔陈清泉   2022-12-23 我要评论

题目 

leetcode.cn/

  • 给你一个整数数组 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 以内的结果都将视为正确答案。

代码

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);
};
  • 首先将原数组排序,这样排序后的新数组会将最大值和最小值放在数组的第一位和最后一位
  • 遍历新数组,因为要排除最大值和最小值,所以范围从数组的第二位到倒数第二位,将每一项的值进行累加
  • 将累加和除以总共累计的项数返回(总项数是数组的长度,排除首尾两项,累加项数为总长度减去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.maxMath.min将数组的最大值和最小值找到
  • 然后利用数组方法splice将最大值和最小值从原数组中删除(splice方法改变原数组的长度
  • 最后使用数组的reduce方法将数组求和
  • 最后将删除最大值和最小值的数组和除以数组长度,得到平均值返回
  • 时间消耗和上面差不太多,内存消耗比上面少一些

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们