1.问题描述:去掉最低工资和最高工资后的工资平均值
给你一个整数数组 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/average-salary-excluding-the-minimum-and-maximum-salary
2.算法思路
1、用java自带的排序算法sort对数组进行从小到大排序
2、取出数组元素为0、1、2的数组
3、用循环遍历求和
3.自己写的题解
public double average(int[] salary) {
Arrays.sort(salary);
double sum=0;
if(salary.length==0||salary.length==1||salary.length==2){
return 0;
}else{
for(int i=1;i<salary.length-1;i++){
sum=sum+salary[i];
}
return sum/(salary.length-2);
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.8 MB, 在所有 Java 提交中击败了79.32%的用户
通过测试用例:43 / 43
4.别人优化的题解
class Solution {
public double average(int[] salary) {
int sum = 0;
int maxSalary = salary[0];
int minSalary = salary[0];
for (int s : salary) {
maxSalary = Math.max(s, maxSalary);
minSalary = Math.min(s, minSalary);
sum += s;
}
return (double)(sum - maxSalary - minSalary) / (salary.length - 2);
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39.1 MB, 在所有 Java 提交中击败了31.89%的用户
通过测试用例:43 / 43
思路:增强for循环 获取到最大最小元素
2、求全部的和,最后减去最大最小的值
5.总结
1、用java自带的排序算法sort对数组进行从小到大排序
2、取出数组元素为0、1、2的数组
3、用循环遍历求和
简单的题,没有找到双100%的解法