在简单问题中使用数组的最小值
use of minimum values with array's in simple problems
我正在学习 Java,作为我工作的一部分,我需要能够执行一些操作,例如计算数组中值的范围 (max - min + 1)。我不允许使用 collections.min(array) 之类的方法。到目前为止,我的解决方案是这样的:
public static int range(int[] data){
int min = 99999999;
int max = 0;
int test = 0;
int range = 0;
for (int i = 0; i < data.length; i++){
test = data[i];
if (test > max)
max = test;
if (test < min)
min = test;
}
range = (max - min) + 1;
return range;
}
虽然它对他们有用,但并不是特别优雅。最小值为 9999999 是可行的,但如果我最终在使用大于该值的数字时遇到问题,它就不起作用。
我觉得应该有更好的解决方案,但我没有看到在不将 int min 设置为非常高的值的情况下找到最小值的方法。否则数组可能有非常大的数字,并且最小值永远不会改变,因为数组中的值总是大于它。
此方法 returns 至少一个元素的所有非空数组的范围,否则它会抛出一个 IllegalArgumentException
。这是通过 max >= min
的健全性检查完成的,如果 min
和 max
的原始初始化值不变,则只有 true
。这只有在 for
循环被跳过时才会发生,这只发生在 null 或空数组上。如果数组包含任何有效的 int
,即使是 Integer.MAX_VALUE
或 Integer.MIN_VALUE
,此完整性检查也会成功。
public static int range(int[] list){
int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;
for(int i = 0; list != null && i < list.length; i++){
int current = list[i];
if(current > max){
max = current;
}
if(current < min){
min = current;
}
}
if(max >= min){
return max-min+1;
}
else throw IllegalArgumentException("Zero-length and null arrays have an undefined range!");
}
我正在学习 Java,作为我工作的一部分,我需要能够执行一些操作,例如计算数组中值的范围 (max - min + 1)。我不允许使用 collections.min(array) 之类的方法。到目前为止,我的解决方案是这样的:
public static int range(int[] data){
int min = 99999999;
int max = 0;
int test = 0;
int range = 0;
for (int i = 0; i < data.length; i++){
test = data[i];
if (test > max)
max = test;
if (test < min)
min = test;
}
range = (max - min) + 1;
return range;
}
虽然它对他们有用,但并不是特别优雅。最小值为 9999999 是可行的,但如果我最终在使用大于该值的数字时遇到问题,它就不起作用。
我觉得应该有更好的解决方案,但我没有看到在不将 int min 设置为非常高的值的情况下找到最小值的方法。否则数组可能有非常大的数字,并且最小值永远不会改变,因为数组中的值总是大于它。
此方法 returns 至少一个元素的所有非空数组的范围,否则它会抛出一个 IllegalArgumentException
。这是通过 max >= min
的健全性检查完成的,如果 min
和 max
的原始初始化值不变,则只有 true
。这只有在 for
循环被跳过时才会发生,这只发生在 null 或空数组上。如果数组包含任何有效的 int
,即使是 Integer.MAX_VALUE
或 Integer.MIN_VALUE
,此完整性检查也会成功。
public static int range(int[] list){
int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;
for(int i = 0; list != null && i < list.length; i++){
int current = list[i];
if(current > max){
max = current;
}
if(current < min){
min = current;
}
}
if(max >= min){
return max-min+1;
}
else throw IllegalArgumentException("Zero-length and null arrays have an undefined range!");
}