我来说一个面试题吧,2012年参与到的Facebook Programming puzzle
这题是当时自己去投Facebook的时候,programming puzzle那关给的题目。
题目如下:
你有足够数量的天秤和砝码。每个天秤有10磅。天秤的左右两边可以放砝码,也可以放天秤。
题目要求是,在给定的初始组合情况下,如何添加砝码,让整体保证平衡。
输入是一串数字,第一行是一个整数,代表当前初始状态一共有多少个天秤,每个天秤都有一个序号
接下来往下,每两行分别代表一个天秤左右两边所包含的天秤序号和包含的砝码重量
每一组的格式如下:
左半的砝码重量 <天秤i,天秤j,...>
右半的砝码重量 <天秤k,天秤m,...>
其中,<>表示数组
输入样例如下:
4 //4个天秤
0 1 //0号天秤左边放置着1号天秤
0 2 //0号天秤右边放置着2号天秤
0 //1号天秤左边啥都没有
0 3 //1号天秤右边放置着3号天秤
3 //2号天秤左边有三磅重的砝码
0 //2号天秤右边啥都没有
0 //3号天秤左边啥都没有
0 //3号天秤右边啥都没有
输出,输出N行。第i行代表第i个天秤的左右两边需要添加多少重量的砝码
输出样例如下:
0: 0 14
1: 10 0
2: 0 3
3: 0 0
大家可以试试看。Facebook当时给我的时间是1小时,当时做完这题就可以进入phone interview,可惜挂在了phone interview那- -。
我是分割线不用考虑力矩,单纯的天秤左右配平。不会出现嵌套情况。
还有就是,当时我在做这题的时候,input不一定是一棵树,有可能是一个森林。
测试用例我得找一找,不一定有存了。。一年前的题,我也换过了电脑。
我准备周一把我的解答放上来。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
今天把答案放出。
这段代码是从去年年初的邮件里扫出来的,由于手头没数据集,没有再调试一下。不过当时都是全通过的,应该没啥问题。下面来简单的说一下思想:
针对input来看,其实就是有一棵或多棵现成的树,目的就是把每个节点的左右两个分支配平。
由于子节点的配平会影响到父节点的配平,所以很自然的就想到了用递归的方法来解这个问题。
整个递归过程就是一个树的后序遍历过程。
话说这代码缩进好像有点问题- -
分割线
调整了代码缩进,加入必要注释
小花了一点时间理解题意,个人解法如下:
如果符合以上,题目综合性不错,涉及了简单树的遍历以及贪心算法
下面是代码(脑袋不好使状态,不知道弄对了没——反正代码风格成渣渣了)
我也做过了!也挂载电话面试上了。英语不行啊