2025-01-24:最小元素和最大元素的最小平均值。用go语言,你有一个空的浮点数数组 averages,以及一个包含偶数个整
2025-01-24:最小元素和最大元素的最小平均值。用go语言,你有一个空的浮点数数组 averages,以及一个包含偶数个整数的数组 nums。你需要执行以下步骤,重复 n/2 次:
1.从 nums 数组中找出并移除最小值 minElement 和最大值 maxElement。
2.计算这两个元素的平均值,即 (minElement + maxElement) / 2,并将其添加到 averages 中。
最后,返回 averages 数组中的最小值。
2 <= n == nums.length <= 50。
n 为偶数。
1 <= nums[i] <= 50。
输入: 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。
答案2025-01-24:
题目来自leetcode3194。
大体步骤如下:
1.排序数组 nums
: [1, 3, 4, 4, 7, 8, 13, 15]
2.初始化空数组 averages
: []
3.进行迭代直到数组长度为 0:
3.1.第一次迭代(i = 0):
3.1.1.移除并记录 minElement = 1
和 maxElement = 15
,更新 nums
为 [3, 4, 4, 7, 8, 13]
3.1.2.计算平均值 (1 + 15) / 2 = 8
, 添加 8 到 averages
: [8]
3.2.第二次迭代(i = 1):
3.2.1.移除并记录 minElement = 3
和 maxElement = 13
,更新 nums
为 [4, 4, 7, 8]
3.2.2.计算平均值 (3 + 13) / 2 = 8
, 添加 8 到 averages
: [8, 8]
3.3.第三次迭代(i = 2):
3.3.1.移除并记录 minElement = 4
和 maxElement = 8
,更新 nums
为 [4, 7]
3.3.2.计算平均值 (4 + 8) / 2 = 6
, 添加 6 到 averages
: [8, 8, 6]
3.4.第四次迭代(i = 3):
3.4.1.移除并记录 minElement = 4
和 maxElement = 7
,更新 nums
为空 []
3.4.2.计算平均值 (4 + 7) / 2 = 5.5
, 添加 5.5 到 averages
: [8, 8, 6, 5.5]
4.返回 averages
中最小的元素,即 5.5
总的时间复杂度:
-
排序数组的时间复杂度为 O(n log n)。
-
迭代直到数组为空需要 O(n/2) 的时间。
总的时间复杂度为 O(n log n)。
总的额外空间复杂度:
- 除了输入数组外,使用了常数级额外空间来存储临时变量和结果数组。
总的额外空间复杂度为 O(1)。
Go完整代码如下:
package main
import (
"fmt"
"sort"
"math"
)
func minimumAverage(nums []int) float64 {
sort.Ints(nums)
res, n := math.MaxFloat64, len(nums)
for i := 0; i < n / 2; i++ {
res = min(res, float64(nums[i] + nums[n - 1 - i]) / 2)
}
return res;
}
func main() {
nums := []int{7,8,3,4,15,13,4,1}
result := minimumAverage(nums)
fmt.Println(result)
}
Rust完整代码如下:
use std::cmp::min;
fn minimum_average(nums: &mut Vec<i32>) -> f64 {
nums.sort();
let mut res = f64::MAX;
let n = nums.len();
for i in 0..(n / 2) {
res = f64::min(res, (nums[i] as f64 + nums[n - 1 - i] as f64) / 2.0);
}
return res;
}
fn main() {
let mut nums = vec![7, 8, 3, 4, 15, 13, 4, 1];
let result = minimum_average(&mut nums);
println!("{}", result);
}
Python完整代码如下:
# -*-coding:utf-8-*-
def minimum_average(nums):
nums.sort() # 对数组进行排序
res = float('inf') # 初始化为无穷大
n = len(nums)
for i in range(n // 2):
average = (nums[i] + nums[n - 1 - i]) / 2 # 计算成对元素的平均值
res = min(res, average) # 更新最小值
return res
if __name__ == "__main__":
nums = [7, 8, 3, 4, 15, 13, 4, 1]
result = minimum_average(nums)
print(result) # 输出结果
- 点赞
- 收藏
- 关注作者
评论(0)