ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

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

题目

算法思想

题目

算法实现

复杂度分析

#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]); //计算Dif(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]); //计算Dif(D_min > D){D_min = D; //若更小,则更新D_min; }}}}return D_min; 
}
返回列表