去掉最低工资和最高工资后的工资平均值
难度:
标签:
题目描述
代码结果
运行时间: 18 ms, 内存: 15.9 MB
/*
* 思路:
* 1. 使用Java Stream API来处理工资数组。
* 2. 找到最低工资和最高工资。
* 3. 计算所有工资的总和。
* 4. 从总和中减去最低工资和最高工资。
* 5. 剩下工资的总和除以剩下的员工数量,得到平均工资。
*/
import java.util.Arrays;
public class Solution {
public double average(int[] salary) {
int minSalary = Arrays.stream(salary).min().getAsInt();
int maxSalary = Arrays.stream(salary).max().getAsInt();
int sum = Arrays.stream(salary).sum();
sum -= (minSalary + maxSalary);
return sum / (double) (salary.length - 2);
}
}
解释
方法:
此题解的思路是首先计算数组中所有工资的总和。然后,通过内置的max和min函数找到最高工资和最低工资,并从总和中减去这两个值。得到的结果再除以工资数组长度减去2(因为去掉了两个工资),即得到剩余工资的平均值。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
在计算总工资时,为什么选择遍历整个数组,而不是在一次遍历中同时计算总和、最大值和最小值?
▷🦆
如果数组 `salary` 只包含两个元素,代码中的处理逻辑会如何应对?
▷🦆
你的方法中使用了多次遍历(一次完整遍历求和,一次查找最大值和最小值),是否可以通过一次遍历完成所有操作以优化性能?
▷🦆
在函数返回结果时,直接使用了 `float` 类型转换,这是否是必要的,考虑到 Python 中的除法 `/` 默认结果就是浮点数?
▷