题目概述
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
Example 1:
1 | Input: [[1,1],[2,2],[3,3]] |
Example 2:
1 | Input: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] |
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
这题比较坑,而且这个hard难度考察的也并不是算法。这题目最直观的想法是通过求两点的直线方程后,对所有点进行遍历并记数。我们需要求到两点之间的斜率等信息。
但是,本题要考虑的还有:
- 如何尽量避免重复的运算
- 对平行于Y轴的直线的特殊处理
- 需要考虑除法带来的一些计算问题:计算机内部的除法得到的值并非是一个分数,而是一个有限小数。比如对于[1,1]、[4,2]两点,通过求解得到的斜率不是正好的1/3,而是类似0.33333的有限小数,因此尽管点[7,3]在这条直线上,但是使用0.33333*(7-1)+1-3得到的并不是0,而是一个很接近0的数字,因此需要尽量避免使用除法
因此,在本题中,我使用了checkMetrix来表示两个点之间是否已经经过了计算,并且使用乘法代替除法
代码实现
1 | class Solution(object): |
l