面试时遇到的一个算法题,请教大家

面试时的时候,面试官问了我一个算法题,题目大概是这样的:一个手机键盘上的数子0-9(也就是九宫格键盘),假如有两个机械臂a和b,初始位置都在0数字上,机械臂移动一步都会消耗一定的能量,问随意给定一个手机号码,两个机械臂怎样移动才会消耗最少的能量把手机号码打印出来。
希望大家给个思路,我觉得是动态规划吧,最后能把代码贴出来,谢谢了……
全部评论
因为数字不多,可以动态规划吧。 数字个数1,返回a,b里移动距离最小的。 数字个数大于1,返回min(a移动距离+剩下n-1个数字移动距离最小的,b移动距离,+剩下n-1个数字移动距离最小的。
点赞 回复 分享
发布于 2016-09-03 09:30
#include<iostream> #include <vector> using namespace std; int DistanceArry[10][10]; int Mindistance=INT_MAX; int arry[11]; int point[2]; void DFS(int index,int value) { if(index==11) { if (value<Mindistance) { Mindistance=value; return ; } } else { for(int i=0;i<2;i++) { int tmp=point[i]; int addvalue=DistanceArry[point[i]][arry[index]]; point[i]=arry[index]; DFS(index+1,value+addvalue); point[i]=tmp; } } } int main() { for(int i=0;i<11;i++) { cin>>arry[i]; } point[0]=point[1]=0; for(int i=0;i<10;i++) { for(int j=i;j<10;j++) { if(i==0) { DistanceArry[j][0]=DistanceArry[0][j]=(11-j)/3+(11-j)%3; } else { DistanceArry[i][j]=DistanceArry[j][i]=((j-i)/3)+(j-i)%3; } } } DistanceArry[0][0]=0; DFS(0,0); cout<<Mindistance<<endl; }
点赞 回复 分享
发布于 2016-09-03 09:19
这不是一个局部最优的题,不能用贪心算法,也就是不能每一步都取距离最小的值,这样总的步数未必是最小的。
点赞 回复 分享
发布于 2016-09-02 23:22
让a去找第一个数字,达到后,a在第一个数字位置,b在0,计算a和b距离第二个数字的距离,谁近谁走,依次类推 (感觉就是计算两个点到第三个点的距离,近的变成第三个点,距离相等走a,再继续计算,个人想法,仅供参考,不知道对不对...)
点赞 回复 分享
发布于 2016-09-02 22:15
这个手机号码是11位的,搜索空间很小,用普通的搜索就行了:(pos1, pos2, index) = Min(dis(pos1, telnum[index]) + (telnum[index], pos2, index+1) /*第一个机械臂从pos1移动到telnum[index]*/,dis(pos2, telnum[index]) + (pos1, telnum[index], index+1)) /*或者第二个机械臂从pos2移动到telnum[index]*/ ; (pos1, pos2, 11) = 0。 (其中dis函数是两个按键的移动消耗,O(1)的复杂度),然后可能会出现重复计算,那么就加个记忆set保存计算过的结果,还有(pos1, pos2, index) == (pos2, pos1, index)。
点赞 回复 分享
发布于 2016-09-02 22:10
双层的DP
点赞 回复 分享
发布于 2016-09-02 21:32
0-9一共10个数,哪来的九宫格?
点赞 回复 分享
发布于 2016-09-02 21:30
各个数字之间的距离集合中求最小和,初步想法……
点赞 回复 分享
发布于 2016-09-02 21:26

相关推荐

01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
评论
点赞
13
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
2781次浏览 41人参与
# HR最不可信的一句话是__ #
966次浏览 31人参与
# MiniMax求职进展汇总 #
24715次浏览 317人参与
# 春招至今,你的战绩如何? #
14085次浏览 132人参与
# AI面会问哪些问题? #
858次浏览 21人参与
# 你的实习产出是真实的还是包装的? #
2514次浏览 48人参与
# 米连集团26产品管培生项目 #
6950次浏览 223人参与
# 沪漂/北漂你觉得哪个更苦? #
1003次浏览 29人参与
# 你做过最难的笔试是哪家公司 #
1048次浏览 18人参与
# AI时代,哪个岗位还有“活路” #
2590次浏览 49人参与
# XX请雇我工作 #
51137次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7925次浏览 43人参与
# 简历第一个项目做什么 #
32017次浏览 354人参与
# 简历中的项目经历要怎么写? #
310816次浏览 4252人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152761次浏览 888人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187508次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64444次浏览 860人参与
# 如果重来一次你还会读研吗 #
229955次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178113次浏览 889人参与
# 你怎么看待AI面试 #
180586次浏览 1291人参与
# 正在春招的你,也参与了去年秋招吗? #
364084次浏览 2640人参与
# 腾讯音乐求职进展汇总 #
160802次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务