📅  最后修改于: 2023-12-03 14:54:51.751000             🧑  作者: Mango
该问题涉及到数据结构中的一些概念,需要有一定的计算机基础和算法知识。
对于给定的一组不同整数,设计一个算法来找到该组整数中最接近它们的平均值的那些整数。在这种情况下,最接近平均值的整数是指与平均值的差最小的整数。如果有多个整数与平均值的差相等,则返回它们中的最小值。设计的算法应该具有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)。