[经典面试题][阿里]三元组最小距离
来源:互联网 发布:二叉树遍历算法 java 编辑:程序博客网 时间:2024/04/28 22:07
题目
已知三个升序整数数组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 ]|)
请设计一个求最小三元组距离的最优算法,并分析时间复杂度。
思路
保持三个下标索引 i,j,k,找出a[i],b[j],c[k]里最小的元素。如果a[i]最小, 则下一次循环 i=i+1, 其他两个索引不变。如果b[j]最小, 则下一次循环 j=j+1, 其他两个索引不变。如果c[k]最小, 则下一次循环 k=k+1, 其他两个索引不变。如此循环,直至最小的数对应的下标到达该数组尾部。记录最小距离。
时间复杂度:O(l+m+m) (每次循环总有一个下标走了一步)。
代码
/*--------------------------------------------- * 日期:2015-02-21 * 作者:SJF0115 * 题目: 三元组最小距离 * 来源:阿里 * 博客: -----------------------------------------------*/ #include <iostream> #include <climits> #include <algorithm> using namespace std; class Solution { public: int MinDistance(int a[],int l,int b[],int m,int c[],int n){ if(l <= 0 || n <= 0 || m <= 0){ return -1; }//if int min = INT_MAX; int dis = 0,first = 0,second = 0,third = 0; for(int i = 0,j = 0,k = 0;i < l && j < m && k < n;){ dis = max(max(abs(a[i]-b[j]),abs(a[i]-c[k])),abs(b[j]-c[k])); if(dis < min){ min = dis; first = i; second = j; third = k; }//if if(a[i] < b[j]){ if(a[i] < c[k]){ ++i; }//if else{ ++k; }//else }//if else{ if(b[j] < c[k]){ ++j; }//if else{ ++k; }//else }//else }//for cout<<"First->"<<first<<" Second->"<<second<<" Third->"<<third<<endl; return min; } }; int main() { Solution solution; int a[] = {5,16,20}; int b[] = {13,14,15,17,35}; int c[] = {19,22,24,29,32,42}; int l = 3,m = 5,n = 6; int result = solution.MinDistance(a,l,b,m,c,n); cout<<result<<endl; }
如果有好的思路,可以留言。。。。。
2 1
- [经典面试题][阿里]三元组最小距离
- 三元组最小距离[阿里2013校招题目]
- 三元组最小距离
- 最小三元组距离
- 三元组距离最小
- 求解最小三元组距离
- [经典面试题]字符串编辑距离
- 阿里巴巴笔试题求最小三元组距离
- JAVA线程安全之阿里经典面试题
- Facebook 2016 面试题1 | 递增三元组子序列
- [经典面试题]排序数组中绝对值最小元素
- 阿里面试题解答
- 阿里面试题
- 阿里面试题备份
- 阿里dba面试题
- 阿里面试题
- 阿里面试题
- 阿里前端面试题
- 【POJ 2187】Beauty Contest
- 手机cpu
- 一步一步学习 JQuery (二) 选择器: 基本选择器 && 层次选择器
- 使用windows上的 MOD_REWRITE 启用 url 重写
- 数学之路-sas备忘(5)
- [经典面试题][阿里]三元组最小距离
- POJ2296 Map Labeler【2-SAT】【二分】
- leetcode_62_uniquepaths_
- 企业号处理请求
- 今年暑假不AC hdu2037 事件序列问题
- NYOJ--125 盗梦空间【水题】
- Linux命令2——cd
- 黑马程序员——c语言学习—作用域详解
- Android 遍历界面控件