你有一个初始为空的浮点数数组 averages。另给你一个包含 n 个整数的数组 nums,其中 n 为偶数。
你需要重复以下步骤 n / 2 次:
从 nums 中移除 最小 的元素 minElement 和 最大 的元素 maxElement。
将 (minElement + maxElement) / 2 加入到 averages 中。
返回 averages 中的 最小 元素。
示例 1:
输入: nums = [7,8,3,4,15,13,4,1]
输出: 5.5
解释:
步骤 nums averages
0 [7,8,3,4,15,13,4,1] []
1 [7,8,3,4,13,4] [8]
2 [7,8,4,4] [8,8]
3 [7,4] [8,8,6]
4 [] [8,8,6,5.5]
返回 averages 中最小的元素,即 5.5。
示例 2:
输入: nums = [1,9,8,3,10,5]
输出: 5.5
解释:
步骤 nums averages
0 [1,9,8,3,10,5] []
1 [9,8,3,5] [5.5]
2 [8,5] [5.5,6]
3 [] [5.5,6,6.5]
示例 3:
输入: nums = [1,2,3,7,8,9]
输出: 5.0
解释:
步骤 nums averages
0 [1,2,3,7,8,9] []
1 [2,3,7,8] [5]
2 [3,7] [5,5]
3 [] [5,5,5]
提示:
2 <= n == nums.length <= 50
n 为偶数。
1 <= nums[i] <= 50
解题思路:
1.先根据数组进行排序
2.使用list添加数据,每次取前后两条数据
3.对计算结果取最小的值
完整代码:
class Solution {
public double minimumAverage(int[] nums) {
Arrays.sort(nums);
List<Integer> list = new ArrayList<>();
List<Double> resultList = new ArrayList<>();
for (int num : nums) {
list.add(num);
}
double res = Integer.MAX_VALUE;
while (!list.isEmpty()) {
Integer min = list.get(0);
Integer max = list.get(list.size()-1);
res = Math.min(res,(min + max) / 2.0);
list.remove(0);
list.remove(list.size()-1);
}
return res;
}
}
既然数组都已经是排序的了,那么只需要每次取头尾两条数据就可以了,那么只需要遍历数组的一半位置就能得出结论
完整代码:
class Solution {
public double minimumAverage(int[] nums) {
// 对数组进行排序,以便后续比较
Arrays.sort(nums);
// 获取数组长度
int n = nums.length;
// 初始化最小平均值为最大双精度值,以便后续比较
double res = Double.MAX_VALUE;
// 遍历数组的前半部分,因为数组已经排序,这样可以保证同时访问到两端的元素
for (int i = 0; i < n / 2; i++) {
// 计算当前两端元素的平均值,并更新最小平均值
res = Math.min(res, (nums[i] + nums[n - 1 - i]) / 2.0);
}
// 返回计算得到的最小平均值
return res;
}
}
标签:5.5,nums,res,元素,list,最小,3194,averages
From: https://www.cnblogs.com/java-cheng/p/18469287