【发布时间】:2020-09-06 18:53:18
【问题描述】:
给定一个任务
返回整数数组的“居中”平均值,我们将说它是值的平均平均值,但忽略数组中的最大值和最小值。如果最小值有多个副本,则只忽略一个副本,最大值也是如此。使用 int 除法产生最终平均值。您可以假设该数组的长度为 3 或更多。
centeredAverage([1, 2, 3, 4, 100]) → 3
centeredAverage([1, 1, 5, 5, 10, 8, 7]) → 5
centeredAverage([-10, -4, -2, -4, -2, 0]) → -3
我尝试过这样解决,但我有点困惑(捕获 ArrayIndexOutOfBounds 异常):
public class Main {
public static void main(String[] args) {
int[] num = {1, 2, 3, 4, 100};
int[] num1 = {1, 1, 5, 5, 10, 8, 7};
int[] num2 = {-10, -4, -2, -4, -2, 0};
System.out.println(centeredAverage(num));
System.out.println(centeredAverage(num1));
System.out.println(centeredAverage(num2));
}
public static int centeredAverage(int[] nums) {
int count = 0;
int average = 0;
//to search for max and min
Arrays.sort(nums);
//the last int of an array
int end = nums[nums.length - 1];
if (nums.length > 3) {
//exclude minimum and maximum values
for (int i = 1; i < end; i++) {
if (!(nums[i] == nums[i + 1])) {
count++;
average = (nums[i] + nums[i + 1]) / count;
}
}
}
return average;
}
}
【问题讨论】:
-
这不是很容易吗?对所有元素求和并跟踪最小值和最大值。从总和中减去它们并除以数组长度 - 2。通过排序,它将从索引
1到索引length - 2的元素相加,然后除以length - 2。 -
在
(int i = 1; i < end; i++)中应该是i < end - 1 -
@Amongalen 错了。
i < end正在比较 index 和 value(end是数组中的最后一个值)。应该是i < nums.length - 2。 (-1 保持在索引范围内,-2 获得倒数第二个元素)。 -
@Thomas 是的,出于某种原因,我认为
end == nums.length
标签: java arrays indexoutofboundsexception