对于给定的三个排序数组A,B和C,它们的大小不一定相同,请计算任何三元组A [i],B [j],C [k]的最小值,即最大数与最小数之间的最小绝对差,例如它们分别在数组A,B和C下,即最小化(max(A [i],B [j],C [k])– min(A [i],B [j],C [k] ))。
输入-
A : [ 2, 5, 6, 9, 11 ] B : [ 7, 10, 16 ] C : [ 3, 4, 7, 7 ]
输出-
1
说明
当我们选择A [i] = 6,B [j] = 7,C [k] = 7时,我们得到的最小差为max(A [i],B [j],C [k])-min( A [i],B [j],C [k]))= | 7-6 | = 1
输入-
A = [ 6, 9, 11, 16 ] B = [ 7, 10, 16, 79, 90 ] C = [ 3, 4, 7, 7, 9, 9, 11 ]
输出-
1
说明-
当我们选择A [i] = 11,b [j] = 10,C [k] = 11时,我们得到的最小差为max(A [i],B [j],C [k])-min( A [i],B [j],C [k]))= | 11-10 | = 1
从数组A,B和C中的最高元素开始。在执行每个步骤时,跟踪变量以更新答案。
关于每个步骤,减小差异的唯一可能方法是减小三个元素中的最大元素。
结果,请访问包含此步骤中最大元素的数组中的下一个最高元素,并更新answer变量。
我们必须重复此步骤,直到并且除非包含最大元素的数组终止。
//以上方法的C ++代码
#include<bits/stdc++.h> usingnamespacestd; intsolve(intA1[], intB1[], intC1[], inti1, intj1, intk1) { intmin_diff, current_diff, max_term; //计算与最后的最小差 //列表索引 min_diff = abs(max(A1[i1], max(B1[j1], C1[k1])) - min(A1[i1], min(B1[j1], C1[k1]))); while(i1 != -1 && j1 != -1 && k1 != -1) { current_diff = abs(max(A1[i1], max(B1[j1], C1[k1])) - min(A1[i1], min(B1[j1], C1[k1]))); //检查条件 if(current_diff < min_diff) min_diff = current_diff; //从列表中计算最大项 max_term = max(A1[i1], max(B1[j1], C1[k1])); if(A1[i1] == max_term) i1 -= 1; elseif(B1[j1] == max_term) j1 -= 1; else k1 -= 1; } returnmin_diff; } intmain() { intD1[] = { 5, 8, 10, 15 }; intE1[] = { 6, 9, 15, 78, 89 }; intF1[] = { 2, 3, 6, 6, 8, 8, 10 }; intnD = sizeof(D1) / sizeof(D1[0]); intnE = sizeof(E1) / sizeof(E1[0]); intnF = sizeof(F1) / sizeof(F1[0]); cout << solve(D1, E1, F1, nD-1, nE-1, nF-1); return0; }
输出结果
1