【问题标题】:Array Exercise Confusion阵列练习混乱
【发布时间】:2014-04-03 22:28:15
【问题描述】:

我已经编写了一个(到目前为止不完整)方法,它应该采用一个整数数组,找到相邻单元格之间的差异,然后返回最小的差异。

例如:

[9, 16, 4, 8, 20] --> 7, 12, 4, 12 --> 4

[12, 21, 33, 6, 3, 3] --> 9, 12, 27, 3, 0 --> 0

这是我的方法:

public static int minGap(int[] a) {
    int gap = 0;
    for (int i = 0 ; i < (a.length - 1) ; i++) {
        gap = Math.abs(a[i + 1] - a[i]);
        System.out.println(gap);
    }
    return gap;
}

我相信我的中间步骤是正确的(找出差异),但我无法弄清楚如何比较所有这些并产生最小的一个。我假设我将使用 if 语句,但我只有一个变量“gap”可以使用。

请告诉我你的建议。

【问题讨论】:

  • 不要全部比较。将第一个结果存储在一个变量中,并将以下结果与该变量进行比较。如果当前结果较小,则替换变量结果。

标签: java arrays variables methods


【解决方案1】:

为目前发现的最小间隙引入一个新变量。它可以被初始化为巨大的东西,可能是Integer.MAX_VALUE

在循环中,如果当前gap小于目前找到的最小gap,则将目前找到的最小gap设置为当前gap。然后在for 循环完成后,您的差距最小。

【讨论】:

  • 这比@peter.petrov 的解决方案干净一点,因为通过初始化为 Integer.MAX_VALUE,您避免了特殊处理第一个间隙的必要性。
【解决方案2】:

只需添加一个 min 变量并根据需要进行更新。

public static int minGap(int[] a) {
    int gap = 0;
    int min = 0;
    for (int i = 0 ; i < (a.length - 1) ; i++) {
        gap = Math.abs(a[i + 1] - a[i]);
        if (i==0 || gap < min) min = gap;
        System.out.println(gap);
    }
    return min;
}

【讨论】:

  • 我认为您不必总是检查i 是否等于0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2014-06-23
  • 2013-08-25
  • 1970-01-01
  • 2018-12-29
  • 2018-02-17
相关资源
最近更新 更多