找到索引之间的最大差异
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()
求绝对值。
嘿 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()
求绝对值。