找到索引之间的最大差异

Find the biggest difference between indexes

嘿 Whosebug 社区, 我现在遇到了一个小问题.. 我必须编写一个代码,它必须找到给定日期之间最大的“温度”差异。 这些是我的数组:

int[] day = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
int[] temperature = {12,14,9,12,15,16,15,15,11,8,13,13,15,12,12,11,7,13,14,11,9,11,10,7,11,6,11,15,10,7};

我需要一个像这样的输出: 最大的温差出现在第 X 天和第 X 天之间,相差 X 度 谁能给我一个提示,最好的方法是什么?

干杯

提示:一次完成的一个好方法是跟踪最小值和最大值,并以某种方式使用它们。

更深入(想自己弄明白的就不要看了):

  • 创建一个最小值和最大值来存储最小值和最大值的索引 max,分别(可以初始化为0和0)
  • 遍历温度数组的每个元素
  • 对于每个元素,如果小于min处的元素,将min改为当前索引
  • 如果大于max处的元素,将max改为当前索引
  • 完成后,您将得到差异最大的索引,只需加一即可得到这一天。

这是一些 java 代码:

void greatestDifference(int[] day, int[] temperature) {
    int min = 0;
    int max = 0;
    for(int i = 0; i < temperature.length; i++) {
        if (temperature[i] < temperature[min]) {
            min = i;
        } else if (temperature[i] > temperature[max]) {
            max = i;
        }
    }
    int difference = temperature[max] - temperature[min];
    System.out.println("The biggest temperature difference was between Day " + (min+1) + " and Day " + (max+1) + ", with the difference of " + difference + " Degrees.");
}

希望对您有所帮助!

编辑:如果您计划 day[] 中的值不只是 1、2、3 等,您可以将打印语句中的 i+1 替换为 day[min]day[max] 以获取它保存这些最小值和最大值的具体日期。

此外,正如@SirRaffleBuffle 指出的那样,for 循环中的索引可以从 1 开始,因为 0 处的值只会与它们自身进行比较,但这不是必需的。

编辑 2: 问题似乎实际上是找到连续几天之间的最大差异。不用担心!这是一些代码:

import java.lang.Math;

void greatestDifference(int[] day, int[] temperature) {
    int max = 0;
    for(int i = 0; i < temperature.length-1; i++) {
        if (abs(temperature[i] - temperature[i+1]) > abs(temperature[max] - temperature[max+1])) {
            max = i;
        }
    }
    int difference = temperature[max+1] - temperature[max];
    System.out.println("The biggest temperature difference was between Day " + (max+1) + " and Day " + (max+2) + ", with the difference of " + difference + " Degrees.");
}

这只是循环遍历 temperatures 中的每个值,并找出它与第二天的温度之间的差异。如果差异大于当前最大值,我们更新最大值。 P.S。 Math.abs()求绝对值。