为什么我的循环从1开始而不是0?

时间:2019-10-15 17:45:01

标签: java

由于我一直在努力与数组打交道,所以我正在进行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开始,是不是跳过了一个单元格?

2 个答案:

答案 0 :(得分:1)

初始化:

int max = nums[0];
int min = nums[0]; 
int add = nums[0];

为您处理i = 0的情况。

答案 1 :(得分:0)

当您设置最大值,最小值和从数组的零索引开始添加时,这样做是从单循环迭代中找到最小值和最大值(即通过从数组的其他元素中求出该值)。如果您还没有这样做,那么您必须使用其他逻辑来查找数组的最小值和最大值,例如O(n)^ 2 soln。