问题描述:
在数列 a_1, a_2, …, a_n中,定义两个元素 a_i 和 a_j 的距离为 |i-j|+|a_i-a_j|,即元素下标的距离加上元素值的差的绝对值,其中 |x| 表示 x 的绝对值。
给定一个数列,请问找出元素之间最大的元素距离。
解题思路:
先把数组的下标差、元素差放到一个另一个数组中,在求出新数组元素最大值即为问题所解。新数组的长度确定方法:运用排列组合知识,类似于握手问题。
附上代码:
public class Test {
public static void main(String[] args) {
int[] a = {9,4,2,4,7};
int[] b = new int[(a.length *(a.length-1)/2)];
int k = 0;
for(int i = 0; i < a.length - 1;i++) {
for(int j = i+1; j < a.length; j++) {
b[k] = Math.abs(i-j) + Math.abs(a[i]-a[j]);
k++;
}
}
int max = b[0];
for(int i = 1; i < b.length; i++) {
if(max < b[i]) {
max = b[i];
}
}
System.out.println(max);
}
}