所以问题是要返回最大数和最小数之间的差异。我写的第一个代码是。
public int bigDiff(int[] nums) {
int max = 0;
int min = 0;
for(int i = 0; i < nums.length; i++){
if(Math.max(max, nums[i]) == nums[i])
max = nums[i];
else if (Math.min(min, nums[i]) == nums[i])
min = nums[i];
}
return max-min;
}
但这仅输出列表中的最大数字。
虽然,当我刚刚玩耍并改变时
int max = nums[0];
int min = nums[0];
它有效吗?但我不明白为什么。如果有人能理解我会如何理解解释:D
答案 0 :(得分:0)
想象一下值数组:1,2,3。适当的最小值为1.但是,您已将min初始化为0.此数组中的值不小于0,因此,min
仍为0.哎呀,答案是错误的。类似的情况:-1,-2,-3的数组,最大值为0 - 再次,错误的结果。
我知道有三种标准方法可以解决这个问题:
INT_MIN
来自<limits.h>
)和minumum - 可能是最大值(INT_MAX
)。很可能两者都会立即更新为nums [0]。i == 0
并立即重置为false。这绝对是一种过度杀伤力。一个直接可用的整数数组,但是当比较是通过模板调用序列实例化的回调内部,或者是另一个太多抽象级别的设计时,这对于繁琐的情况是好的... 您已经警告过else
是错误的,但是,从数学角度来说,它允许我的变体1和3(但不适用于变体2!让您自己找出失败证明)。
答案 1 :(得分:-1)
当你刚刚玩游戏并改变int max = nums[0]; int min = nums[0];
时,工作。
因为,如果你想获得最大数量,你必须让变量max
小于所有arrary成员,那么函数max()
将使max
成为当前的最大数量。
因此,变量min
必须大于数组的每个成员!