题目:给你一个整数数组 salary ,数组里每个数都是 唯一 的,其中 salary[i] 是第 i 个员工的工资。
请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。
思路:
- 先对数组进行排序,这里为了排序效率选择的是快速排序算法;
- 排序完后遍历数组相加,剔除最高和最低的元素即可。
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); //
}
}