三数组最小距离:2020年408算法题

三数组最小距离:2020年408算法题_第1张图片

算法思想

三数组最小距离:2020年408算法题_第2张图片

算法实现

复杂度分析

#define INT_MAX 0x7fffffff //c语言int类型最大值 

//计算绝对值
int abs(int a){
	if(a<0) return -a;
	else return a;
}  

//判断a是否为3个数中最小值 
bool isMin(int a,int b,int c){
	if(a<=b&&a<=c) return true;
	return false;
}

//主函数
int findMin(int A[],int a_len,int B[],int b_len,int C[],int c_len) {
	int i = 0, j = 0, k = 0, D_min = INT_MAX, D;
	while(i < a_len && j < b_len && k < c_len){
		D = abs_(A [i] -B [j]) + abs_(B [j] -C [k]) +abs_(C[k] -A[i]); //计算D
		if(D < D_min) D_min=D;  //更新 D
		//移动最小值的下标
		if (isMin(A[i] ,B[j],C[k])) i++; 
		else if(isMin(B[j],C[k],A[i])) j++;
		else k++;
	)
	return D_min; 
}

算法实现2(三层for循环枚举比较找到最小值)

  • 这种算法时间复杂度为O(n³),空间复杂度为O(1)
//计算绝对值
int abs(int a){
	if(a<0) return -a;
	else return a;
} 
//主函数
int findMin(int A[],int a_len,int B[],int b_len,int C[],int c_len) {
	int D_min = INT_MAX;
	int D;
	for(int i = 0; i < a_len ;i++){
		for(int j = 0; j < b_len ;j++){
			for(int k = 0; k < c_len ;k++){
				D = abs_(A [i] -B [j]) + abs_(B [j] -C [k]) +abs_(C[k] -A[i]); //计算D
				if(D_min > D){
					D_min = D; //若更小,则更新D_min; 
				}
			}
		}
	}
	return D_min; 
}

你可能感兴趣的:(数据结构与算法,算法)