【发布时间】:2020-02-27 11:33:35
【问题描述】:
一对位置[i, j] 具有i < j 和A[i] ≥ A[j] 的属性(即反转),
这样A[i] − A[j] 是 A 中所有反演中可能的最大值。
class Main {
static int[] diff(int arr[], int n){
int index1=0;
int index2=0;
int maxdiff=0;
int[] ans=new int[3];
int i,j;
for (i=0; i<n; ++i){
for (j=n-1; j>i; --j){
if(arr[i]>arr[j] && maxdiff<arr[i]-arr[j])
maxdiff=arr[i]-arr[j];
index1=i;
index2=j;
ans[0]=index1;
ans[1]=index2;
ans[2]=maxdiff;
}
}
return ans;
}
public static void main(String[] args) {
Main max = new Main();
int arr[]={1,20,2,6,11,16,8};
int n=arr.length;
int[] ans=max.diff(arr, n);
System.out.println("i="+ans[0]);
System.out.println("j=" + ans[1]);
System.out.println(ans[2]);
}
}
如您所见,我想打印i=2 和j=3,因为arr[2]-arr[3] 是最大的反转,如果有人能给我一些建议,我将不胜感激。
【问题讨论】:
-
当我运行这段代码时,它返回 i=5 和 j=6,我不知道那里出了什么问题,希望有人能帮助我
-
你的意思是 i=1 和 j=2?
-
这里不需要分治。我建议从头开始。它可以在一个数组传递中完成。跟踪 i 和 i + 1。一切顺利
-
您可能想为您的 if(arr[i]>arr[j] && maxdiff
-
@GuangzheLi 如果我正确理解了这个问题,您需要一种算法,它可以将输出作为两个索引和最大差异 b/w 其中
indexFirst < indexSecond and array[indexFirst] >= array[indexSecond]
标签: java arrays divide-and-conquer inversion