要求:
已知三个升序整数数组a[l], b[m]和c[n],请在三个数组中各找一个元素,使得组成的三元组距离最小。三元组的距离定义是:假设a[i]、b[j]和c[k]是一个三元组,那么距离为:Distance = max(|a[ i ] – b[ j ]|, |a[ i ] – c[ k ]|, |b[ j ] – c[ k ]|),请设计一个求最小三元组距离的最优算法,并分析时间复杂度。
分析:
方法一:蛮力法
暴力破解,则分别遍历三个数组中的元素,对遍历到的元素分别求出它的距离,然后从中查找最小值。
方法二:最小距离法
具体思路为:从三个数组的第一个元素开始,首先求出它们的距离minDist,接着找出这三个数中最小数所在数组,只对这个数组的下标往后移动一个位置,接着求三个数组中当前遍历元素的距离,如果比minDist小,则把当前距离赋值给minDist,依次类推,直到遍历完其中一个数组为止。
例如:a = [3,4,5,7,15] b = [10,12,14,16,17] c = [20,21,23,24,37,30]
①首先从三个数组中找出第一个元素3,10,20,显然它们距离为20-3=17;
②