📌  相关文章
📜  教资会网络 | UGC-NET CS 2017 年 12 月 2 日 |问题 13(1)

📅  最后修改于: 2023-12-03 14:54:51.751000             🧑  作者: Mango

UGC-NET CS 2017 年 12 月 2 日 | 问题 13

该问题涉及到数据结构中的一些概念,需要有一定的计算机基础和算法知识。

问题描述

对于给定的一组不同整数,设计一个算法来找到该组整数中最接近它们的平均值的那些整数。在这种情况下,最接近平均值的整数是指与平均值的差最小的整数。如果有多个整数与平均值的差相等,则返回它们中的最小值。设计的算法应该具有O(n)的时间复杂度。

示例
输入: [1, 2, 3, 4, 5]
输出: [3, 2]
解释: 3 和 2 是最接近平均值的整数,它们与平均值的差相等。
思路分析

首先,我们需要计算给定数组的平均值。然后,我们需要找到最接近平均值的整数。具体来说,我们可以使用两个变量来存储当前最接近平均值的整数和最小差值。在一次迭代中,我们计算每个元素与平均值的差值,并将其与当前最小差值进行比较。如果当前差值较小,则更新最小差值和最接近平均值的整数。如果当前差值与最小差值相等,则将该整数与当前最接近平均值的整数进行比较,并选择更小的一个作为当前最接近平均值的整数。

代码实现

下面是使用 Java 编写的算法实现代码片段:

public int[] findClosest(int[] nums) {
    int sum = 0;
    for (int num : nums) {
        sum += num;
    }
    int avg = sum / nums.length;
    int minDiff = Integer.MAX_VALUE;
    int closest = 0;
    for (int num : nums) {
        int diff = Math.abs(num - avg);
        if (diff < minDiff) {
            minDiff = diff;
            closest = num;
        } else if (diff == minDiff && num < closest) {
            closest = num;
        }
    }
    int[] result = new int[2];
    result[0] = closest;
    result[1] = avg;
    return result;
}

代码使用了两次 for 循环,时间复杂度为 O(n)。