X

LEETCODE 1491. Average Salary Excluding the Minimum and Maximum Salary 解题思路分析

题目大意:

去掉最低工资和最高工资后的工资平均值

给你一个整数数组 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-解题思路分析/
Categories: leetcode
kwantong: