【每日一题】去掉最低工资和最高工资后的工资平均值

地址

leetcode地址:

https://leetcode.cn/problems/average-salary-excluding-the-minimum-and-maximum-salary/description/?envType=study-plan-v2&envId=programming-skills

难度

简单

题目

给你一个整数数组 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 以内的结果都将视为正确答案。

思路

salary是一个数组,最低工资和最高工资即为数组中的最小值和最大值。

首先就是对salary进行排序,那么salary[0]和salary[salary.length-1]即为最小值和最大值。对剩下的数组累加,在除以个数即为剩下员工的平均值。

class Solution {
    public double average(int[] salary) {
        // 对salary进行排序,从小到大进行排序
        Arrays.sort(salary);
        int N = salary.length;
        int count=0;
        double sum = 0;
            for(int i =1;i<N-1;i++){
                sum += salary[i];
                count++;
            }
    
        return sum/count;
    }
}

还有一种方法就是对salary进行循环累加,并且得到最大值和最小值,最后将累加值减去最大值和最小值,在除以数组的长度减2,即为剩下员工的平均值

class Solution {
    public double average(int[] salary) {
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        double sum = 0;
        int len = salary.length;
        for (int i = 0; i < len; i++) {
            sum = sum + salary[i];
            max = Math.max(max,salary[i]);
            min = Math.min(min,salary[i]);
        }
        return (sum - (max + min)) / (len - 2);
    }
}

需要注意点的是返回值是double类型,故累加值最好设置为double类型。

点个赞。面试大概率是不让用排序的。

def print_salary(salary: list):
    min_value=salary[0]
    max_value=salary[0]
    for i in range(1,len(salary)):
        if salary[i]<min_value:
            min_value=salary[i]
        elif salary[i]>max_value:
            max_value=salary[i]
    salary.remove(max_value)
    salary.remove(min_value)
    return round(sum(salary)/len(salary),5)

assert print_salary([4000,3000,1000,2000])==2500.00000
assert print_salary([1000,2000,3000])==2000.00000
assert print_salary([6000,5000,4000,3000,2000,1000])==3500.00000
assert print_salary([8000,9000,2000,3000,6000,1000])==4750.00000
1 Like