package com.lfsun.main.demoleetcode.easy;
import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.Comparator;
/**
*
* 给你一个整数数组 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 以内的结果都将视为正确答案。
* @author: lfsun
* @time: 21:13
* @date: 2022/12/15
*/
public class Average {
public double average(int[] salary) {
Arrays.sort(salary);
double sum = 0;
for (int i = 1; i < salary.length - 1; i++) {
sum += salary[i];
}
return sum / (salary.length - 2);
}
public double averageByStream(int[] salary) {
// 排序 跳过第一个, limit (salary.length - 2) 个 求剩下平均数
return Arrays.stream(salary).boxed().sorted().skip(1).limit(salary.length - 2).mapToInt(Integer::valueOf).average().getAsDouble();
// 排序 跳过第一个,倒序 跳过第一个 求剩下平均数
//return Arrays.stream(salary).boxed().sorted().skip(1).sorted(Comparator.reverseOrder()).skip(1).mapToInt(Integer::valueOf).average().getAsDouble();
}
@Test
public void test() {
System.out.println(averageByStream(new int[]{
4000, 3000, 1000, 2000}));
}
}
还没有评论,来说两句吧...