Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
第一反应,先画图看看是个啥规律。人类是怎么判断点和线的。
如下图,用线连起来的3个点是max number of points lie on same line. 其他当然还可以造不同的line,但是数量都是2,或者1.
所以难到我们要画出所有的线吗,这个是不是有点瞎。所以在不考虑代码的情况下,人是怎么可以一眼看出哪条线包含最多的points的。
尝试了一下发现, 当点数非常多的时候,人是无法做这个题的。
穷举。 对每个点都计算一下该点和其他点连线的斜率。这样对于这个点来说,相同斜率的直线有多少条,就代表有多少个点在同一条直线上。 因为这些直线是相同的。另外,如果计算过A, B的直线,当计算到B时,就不用和A连线了。 我们用哈希表,以斜率为key,记录有多少重复直线!!!
我们用到gcd 的原因是,同一条线上的delta x, delta y都是存在一个ratio的, which is the slope。我们除了这个slope让其变为基本case。