题目描述:
思路分析:目前想到两种解决方案
方法一:三次for循环遍历三个数组,先定义最小值为int类型的最大值,然后通过每次求到的绝对值之和D和min对比,找到最小值min。
定义a,b,c;在每次找到最小值的同时,都更新a,b,c为对应s1,s2,s3数组的值,最后输出min和(a,b,c)。但是此种方法时间复杂度太高。
方法二:距离D = ∣ a − b ∣ + ∣ b − c ∣ + ∣ c − a ∣ = 2 * ∣ c − a ∣
只需要找到距离中的的最大值和最小值的作差
public class Main {
public static void main(String[] args) {
int [] a= {-1,0,9};
int [] b= {-25,-10,10,11};
int [] c= {2,9,17,30,41};
juli(a,b,c);
}
private static int Min(int a,int b,int c) {
if(a<b&&a<c) {
return a;
}else if(b<a && b<c) {
return b;
}else {
return c;
}
}
private static int Max(int a,int b,int c) {
if(a>b&&a>c) {
return a;
}else if(b>a && b>c) {
return b;
}else {
return c;
}
}
private static void juli(int[] a, int[] b, int[] c) {
int i=0,j=0,k=0;
int sum=999;
while(i<a.length && j<b.length && k<c.length) {
if(sum>Max(a[i],b[j],c[k])-Min(a[i],b[j],c[k])) {
sum = Max(a[i],b[j],c[k])-Min(a[i],b[j],c[k]);
}
if(a[i]<=b[j] && a[i]<=c[k]) {
i++;
}else if(b[j]<=a[i] && b[j]<=c[k]) {
j++;
}else {
k++;
}
}
System.out.println(sum*2);
}
}