对于此数组{2,6,1,5,10,7}
,下面的代码将返回10-1 = 9.请解释它是如何工作的以及该逻辑如何在该数组中找到最小值1。
void method(int[] ar,int n) {
int max =ar[1]-ar[0];
int i,j;
for( i=0;i<n;i++)
{
for(j=i+1;j<n;j++){
if(ar[j]-ar[i]>max)
max=ar[j]-ar[i];
}
}
System.out.println(max);
}
答案 0 :(得分:3)
您只需要在一个循环中找到最大数量和最小数量:
int max = Integer.MIN_VALUE , min = Integer.MAX_VALUE;
for(int i = 0 ; i < n ; i ++){
max = Math.max(arr[i], max);
min = Math.min(arr[i], min);
}
System.out.println(max - min);
答案 1 :(得分:1)
试试这个。
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] a = { 2, 6, 1, 5, 10, 7 };
Arrays.sort(a);
System.out.println(a[a.length - 1] - a[0]);
}
}
答案 2 :(得分:1)
为什么得到'9'作为答案的原因是因为被计算的最大差异是10-1=9
。
在i=2
和j=4
计算的最大差异是
=&GT; max = ar[j] - ar[i];
=&GT; max = 10 - 1;
=&GT; max = 9
修改强>
但是,当然,更优化的方法是对数组进行排序,找出第一个和最后一个元素之间的差异。
Arrays.sort(ar);
System.out.println(ar[ar.length-1] - ar[0]);
<强>输出强>
9
答案 3 :(得分:1)
程序中的代码复杂性非常高。
总是有更好的方法
我的
int[] numArray = {2,6,1,5,10,7};
int max = numArray[0];
int min = numArray[0];
for( int i : numArray){
if( max < i )
max = i;
if( min > i )
min = i;
}
System.out.println("Maximum Difference of an Array is "+(max - min ));
答案 4 :(得分:1)
逻辑假设数组中的最大差异在前两个数字之间。
最大变量用于保存最大差异
max = arr[1] - arr[0] //assumption made that the the first two integers give the max difference
现在我们创建一个嵌套循环,以便使用数组中的所有其他值计算数字的差异。
但我们不需要检查已计算的值以节省我们的时间。由于我们只需要差异,我想指出一点,我们采取差异总是积极的。因此,我们只关注未来的价值
abs(arr[0] - arr[1]) = abs(arr[1] - arr[0])
其中abs代表绝对值。
现在,当算法发现任何大于最大值的差异时,将一个值与其他值的差异进行比较时,它会更新max的值。
因此,在退出循环后,我们得到数组值的最大差异。
PS:更好的方法是对数组进行排序,然后减去索引和最后一个值
PPS:如果您想更好地理解这个循环,您还可以查看选择排序
答案 5 :(得分:0)
此解决方案用于未排序的负数数组
public int computeDifference() {
int min_ele = arr[0];
int max_ele = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min_ele)
min_ele = arr[i];
if (arr[i]>max_ele)
max_ele = arr[i];
}
return Math.abs(max_ele - min_ele);
}