JS题解leetcode去掉最低工资和最高工资后的工资平均值
题目
- 给你一个整数数组
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以内的结果都将视为正确答案。
代码
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.max和Math.min将数组的最大值和最小值找到 - 然后利用数组方法
splice将最大值和最小值从原数组中删除(splice方法改变原数组的长度) - 最后使用数组的
reduce方法将数组求和 - 最后将删除最大值和最小值的数组和除以数组长度,得到平均值返回
- 时间消耗和上面差不太多,内存消耗比上面少一些
以上就是JS题解leetcode去掉最低工资和最高工资后的工资平均值的详细内容,更多关于JS题解leetcode工资平均值的资料请关注脚本之家其它相关文章!
相关文章
javascript实现的textarea运行框效果代码 不用指定id批量指定
今天在写一个网页的时候用到了N多嵌套在textarea标签里的代码,定义双击运行其内的代码段。但是每次创建一个这样的可运行的实例都要给textarea元素自定义一个id值和写入双击事件,好不麻烦。2009-12-12


最新评论