专栏 | 九章算法
网址 | www.jiuzhang.com
题目描述
给定平面上的n个点,问是否存在一条平行于y轴的直线,使得这n个点相对于这条直线对称。
Follow-up
是否存在一条直线使得这n个点关于这条直线对称?
算法分析
因为对称轴一定平行于y轴,这看起来缩小了穷举范围(可是我们真的要穷举可能的对称轴吗?有实无限个可能点对称轴...)
那么我们怎么找到那条对称轴?对称轴的特点就是每一个点都在另一边有一个对应的点。刷题君的第一想法是:最左边的点一定对应某个最右边的点,因此最左边的点和最右边的点的中点应该在对称轴上。当然还有很多其他的找对称轴的方法,比如求所有x坐标的平均值。
找到了对称轴的位置,我们就可以通过HashMap判断是否每一个点都有对应的点,最后输出答案即可。
时间复杂度为O(N)。
不甘寂寞的刷题君想到了一个可能的follow up:如果对称轴是任意直线呢?答案我们会在下期的微信题解里揭晓。
参考程序
面试官角度分析
这是一道简单难度的题,兼具算法设计(找对称轴)和数据结构(考察hashmap),虽然简单但是可以区分一部分面试者。对于想要 达到hire的同学是必须在面试时AC的。
LintCode相关练习题
推荐阅读
- 12 个 tips 教你搞定 onsite!
- 25 个 questions, 教你向面试官提问!
- 10 个 tips 教你搞定电面!
- 北美IT企业fulltime薪资大曝光
- IT 简历模板大放送 | 《如何写好技术简历》讲座精华总结
- 面试遇到做过的题怎么办?
- 冷冻期大揭秘 | Google、FB、Amazon、Linkedin冷冻期
- 面试前如何了解一家IT企业?试试官方技术博客!
- Google晋升机制 | 大公司如何升级打怪, 获得晋升?
欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等
