我正准备接受谷歌的电话采访,并遇到这个问题:
给定2D空间中的行列表,如何在小于O(n ^ 2)的时间内计算交叉点的数量?
他们说受访者给出了一个O(n ^ 2)解决方案,然后面试官问他是否可以找到更好的解决方案。
感谢。
答案 0 :(得分:3)
2D中的两条线相交一次或它们是平行的。如果没有线平行,则有n *(n-1)/ 2个交点。 O(n log n)解决方案是按斜率对线进行排序,然后扫描并行度,为找到的每组m条平行线减去m *(m-1)/ 2。
当然,这忽略了浮点数舍入的任何实际问题,但我假设如果需要考虑这个问题就会提到。