由于我一直在努力与数组打交道,所以我正在进行codingbat的一些练习。问题是:
“返回一个整数数组的“居中”平均值,我们将其称为值的平均值,但忽略数组中的最大值和最小值。如果存在多个最小值的副本,只忽略一个副本,并忽略最大值。使用int除法生成最终平均值。您可以假定数组的长度为3或更大。”
除1部分外,我都能够正确编码解决方案。
正确的代码是:
public int centeredAverage(int[] nums) {
int max = nums[0];
int min = nums[0];
int add = nums[0];
for(int i = 1; i < nums.length; i++){
add += nums[i];
if(nums[i] > max){
max = nums[i];
}
else if(nums[i] < min){
min = nums[i];
}
}
return (add - max - min) / (nums.length - 2);
}
我的问题是为什么我们从int i = 1而不是0开始?如果从1开始,是不是跳过了一个单元格?
答案 0 :(得分:1)
初始化:
int max = nums[0];
int min = nums[0];
int add = nums[0];
为您处理i = 0的情况。
答案 1 :(得分:0)
当您设置最大值,最小值和从数组的零索引开始添加时,这样做是从单循环迭代中找到最小值和最大值(即通过从数组的其他元素中求出该值)。如果您还没有这样做,那么您必须使用其他逻辑来查找数组的最小值和最大值,例如O(n)^ 2 soln。