题目:
已知三个升序整数数组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]|)请设计一个求最小三元组距离的最优算法,并分析时间复杂度。
分析参考:http://blog.csdn.net/ccfeng2008/article/details/12013675
三个数两两之差的最大值是三个数中的最大值减去三个数中的最小值,即可以将距离公式转换为:
distance = max(a[i],b[j],c[k]) - min(a[i],b[j],c[k]) ,因为数组都为升序,所以每次只需要将min(a[i],b[j],c[k]) 所在数组的索引值加1即可。
时间复杂度为O(l+m+n)
#include <iostream>
#include "limits.h"
using namespace std;
//求三个数的最小值
int t_min(int x, int y, int z) {
int tmp = x < y ? x : y;
return tmp < z ? tmp : z;
}
//求三个数的最大值
int t_max(int x, int y, int z) {
int tmp = x > y ? x : y;
return tmp > z ? tmp