题目大意:
去掉最低工资和最高工资后的工资平均值
给你一个整数数组 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 以内的结果都将视为正确答案。
如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1491
解题思路分析:
这是一道简单的求平均数的问题,只不过需要在所有取值范围内忽略掉最低和最高值。解题时,我们循环一遍数组,找到其中的最大值max和最小值min,并且求出所有工资的总和sum。然后,使用公式(sum-max-min)/(length-2)计算即可。
实现代码:
public double average(int[] salary) { int max=Integer.MIN_VALUE; // 最大值 int min=Integer.MAX_VALUE; // 最小值 int sum=0; // 和 for(int s : salary){ max=Math.max(max, s); // 更新最大值 min=Math.min(min, s); // 更新最小值 sum+=s; // 累加和 } return (double)(sum-min-max)/(salary.length-2); }
本题解法执行时间为0ms。
Runtime: 0 ms, faster than 100.00% of Java online submissions for Average Salary Excluding the Minimum and Maximum Salary.
Memory Usage: 36.9 MB, less than 100.00% of Java online submissions for Average Salary Excluding the Minimum and Maximum Salary.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-1491-average-salary-excluding-the-minimum-and-maximum-salary-解题思路分析/