2025-01-24:最小元素和最大元素的最小平均值。用go语言,你有一个空的浮点数数组 averages,以及一个包含偶数个整

举报
福大大架构师每日一题 发表于 2025/01/24 16:51:06 2025/01/24
【摘要】 2025-01-24:最小元素和最大元素的最小平均值。用go语言,你有一个空的浮点数数组 averages,以及一个包含偶数个整数的数组 nums。你需要执行以下步骤,重复 n/2 次:1.从 nums 数组中找出并移除最小值 minElement 和最大值 maxElement。2.计算这两个元素的平均值,即 (minElement + maxElement) / 2,并将其添加到 ave...

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:

chatgpt

题目来自leetcode3194。

大体步骤如下:

1.排序数组 nums: [1, 3, 4, 4, 7, 8, 13, 15]

2.初始化空数组 averages: []

3.进行迭代直到数组长度为 0:

3.1.第一次迭代(i = 0):

3.1.1.移除并记录 minElement = 1maxElement = 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 = 3maxElement = 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 = 4maxElement = 8,更新 nums 为 [4, 7]

3.3.2.计算平均值 (4 + 8) / 2 = 6, 添加 6 到 averages: [8, 8, 6]

3.4.第四次迭代(i = 3):

3.4.1.移除并记录 minElement = 4maxElement = 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)  # 输出结果

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。