【力扣热题100】3194. 最小元素和最大元素的最小平均值【Java】
题目:3194.最小元素和最大元素的最小平均值
你有一个初始为空的浮点数数组
averages
。另给你一个包含n
个整数的数组nums
,其中n
为偶数。你需要重复以下步骤
n / 2
次:
- 从
nums
中移除 最小 的元素minElement
和 最大 的元素maxElement
。- 将
(minElement + maxElement) / 2
加入到averages
中。返回
averages
中的 最小 元素。
解题思路
有两种思路
第一种:数组转为List ,用List的函数进行排序,再计算平均值,取最小值;
第二种:直接进行数组排序,后续一样,计算平均值,取最小值。
解题过程
第一种:
1、先判断数组的长度、是否为2的倍数,或者数组长度恰好为2,则直接返回结果。
2、利用Arrays.sort方法给nums排序。
3、计算平均值,获取最小平均值。
class Solution {
public double minimumAverage(int[] nums) {
if (nums.length < 2 || nums.length % 2 != 0) {
return 0;
}
if (nums.length == 2) {
return (double) (nums[0] + nums[1]) / 2;
}
int n = nums.length;
Arrays.sort(nums);
double min = (double) (nums[0] + nums[n - 1]) / 2;
for (int p = 1; p < n / 2; p++) {
double temp = (double) (nums[p] + nums[n - p - 1]) / 2;
if (min > temp) {
min = temp;
}
}
return min;
}
}
第二种:
1、先判断数组的长度、是否为2的倍数,或者数组长度恰好为2,则直接返回结果。
2、进行排序,排序方法选择的冒泡排序。
3、循环计算排序的数据,获得最小平均值返回。
class Solution {
public double minimumAverage(int[] nums) {
if (nums.length < 2) {
return 0;
}
if (nums.length == 2) {
return (double) (nums[0] + nums[1]) / 2;
}
int n = nums.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
double min= (double)(nums[0]+nums[n-1])/2;
for ( int p=1; p<n/2 ; p++ ) {
double temp = (double) (nums[p]+nums[n-p-1])/2;
if(min>temp) {
min =temp;
}
}
return min;
}
}