LeetCode题目:1491 去掉最低工资和最高工资的平均值

96 阅读1分钟

题目:给你一个整数数组 salary ,数组里每个数都是 唯一 的,其中 salary[i] 是第 i 个员工的工资。

请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。

思路:

  1. 先对数组进行排序,这里为了排序效率选择的是快速排序算法;
  2. 排序完后遍历数组相加,剔除最高和最低的元素即可。
class Solution {
    public double average(int[] salary) {
    
        //这里先使用排序算法进行排序
        Solution.sort(salary,0,salary.length-1);
        double sum = 0.0;
        //遍历数组求和
        for (int i = 0; i < salary.length; i++) {
            //去掉最小和最大的元素
            if(i==0||i==salary.length-1)
                continue;
            sum += salary[i];
        }
        return sum/(salary.length-2);


    }

    // 快速排序算法,基于挖坑的思想进行的快排
    public static void sort(int[] array, int left, int right) {
        if (left >= right) return; // 递归的退出条件

        int key = array[left];  //洞
        int i = left;   
        int j = right;

        while (i < j) {
            //现在坑在左边,因此我们遍历右边的元素,尝试找到一个可以填坑的元素
            while (i < j && array[j] >= key) {
                j--;
            }
            //找到后填坑,此时坑到了右边
            array[i] = array[j];
            //现在坑在右边,因此我们遍历左边的元素,尝试找到一个可以填坑的元素
            while (i < j && array[i] <= key) {
                i++;
            }
            array[j] = array[i];
        }
        //循环完成后将key值赋值给坑的位置,此时
        array[i] = key;
        
        //已经此时坑所在的位置进行左右递归
        sort(array, left, i - 1); //
        sort(array, i + 1, right); //
    }
}