如何确定同一行的最大点数?

时间:2013-01-25 06:29:03

标签: c algorithm

给定:很多点都有一个独特的坐标(x i ,y i

输出:同一行上的最大点数

这是我的方法:

for i=1..n
    for j=i..n
        get the line determined by point[i] and point[j]
        for k=1..n
            check if point[k] is on this line

但似乎这种方法需要花费太多时间并且总是超过OJ系统的时间限制。

2 个答案:

答案 0 :(得分:3)

迭代每个点,计算每个其他点的极角,对极角进行排序

这个成本为O(n ^ 2 * lgn)

答案 1 :(得分:0)

我没有实现这个,但你可以在O(n)中实现它。

  • 使用散列图按极角存储点:Map<Double,List<Point>>,其中Double是角度

  • 然后迭代地图,跟踪List<Point>的最大长度。该列表将包含结果。

玩那个。它看起来应该有效。