开心的饭桶

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近在看机会,前几天去面试,又一次碰壁而回。这次一共做了四道题,都没能够当时就给出明确的解决方案。

刚刚把其中的一题重新做了一下,现在拿出来跟大家分享一下,也期待大家能帮忙想一下有没有更好的解决方案。

题目大概是这样的:

       在一个直角坐标线中,有10万个点,现在给出一个坐标(x,y),快速的找出离这个坐标最近的3个点。       

思路一:

       计算出所有点与这个坐标(x,y)的距离,再排序,取出前三个。

       优缺点分析:这个思路无疑是程序员见到这个题目最直接的反应。但仔细想想,如果坐标点的数量增加到百万千万,再加上大并发的话,服务的压力可想而知。

思路二:

       以(x,y)为中心不断向外画正方形,正方形的面积增量,通过点的密度及一个修正值决定。在找到超过3个点时,调用思路一中的方法。

       优缺点分析:如果让一个人去做这件事,他一定拿起一个圆规,然后目测一下点的分布密度,然后再以(x,y)为中心,画一个圆。这样就大大的缩小了刷选范围。此思路就是来源于此。

曾经不太好的的思路

       1、本来想画圆来着,但是仔细考虑了一下,计算距离需要平方相加再开方,还不如直接比较xy值的大小。

       2、另外也考虑过了二分法确定面积增量,但是考虑到遍历的次数会太多,就放弃了。

简单写了一下代码

       没有写注释,见谅:https://files.cnblogs.com/fantong/Lm.Test.rar

测试结果如下:

posted on 2013-05-11 15:31  开心的饭桶  阅读(2656)  评论(13编辑  收藏  举报