繁体   English   中英

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

[英]Why would my loop start at 1 rather than 0?

我正在做一些关于codingbat的练习,因为我一直在努力使用arrays。 问题是:

“返回整数数组的“居中”平均值,我们会说这是值的平均值,除了忽略数组中的最大值和最小值。如果最小值有多个副本,则只忽略一个复制,同样对于最大值。使用 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 开始,你不是跳过一个单元格吗?

初始化:

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

为您处理 i = 0 时的情况。

当您从数组的零索引设置最大值、最小值和添加时。通过这样做,您可以从单个循环迭代中找到最小值和最大值(即通过比较数组的其他元素中的这些值)。 如果你还没有这样做,那么你必须使用其他一些逻辑来找到数组的最小值和最大值,比如 O(n)^2 soln。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM