博文中会简要介绍Leetcode P0149题目分析及解题思路。
“Max Points on a Line”这道题看起来难,其实就是纯数学问题,最简单的思路就是每个点求出一条线,然后判断其他点是否在这条线上,接着记录所有在这条线上的点,最后和当前最大记录值比较即可。这样的解法的时间复杂度是O(n^3)。
其实也有O(n^2)的解法,可以将所有截距和斜率当作键存储在HashTable中,这样相同斜率和截距就会被统计到该键对应的值中。不过本文不会详细讲解这个方法,有兴趣的话大家可以去Leetcode官网上查看。
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
Example 1:
这道题由于涉及除法精度问题,建议使用点斜式而不是截距式,思路如下,
以下是Java的题解代码实现。
除了上述的点斜式三点共线的方法判断以外,还可以使用叉积法判断三点共线。C++代码实现了叉积法的解法。
以下是C++的题解代码实现。