文章目录
题目
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
示例 1:
输入: [[1,1],[2,2],[3,3]]
输出: 3
解释:
^
|
| o
| o
| o
±------------>
0 1 2 3 4
示例 2:
输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出: 4
解释:
^
|
| o
| o o
| o
| o o
±------------------>
0 1 2 3 4 5 6
解法一(直线斜率)
思路:以某一个点A为基础点,查看所有其他点跟他形成直线的斜率,如果另外两个点B、C跟A连线的斜率一样,则ABC三个点则在同一条直线上,使用两点式的直线方程来计算斜率: y − y 1 x − x 1 = y 1 − y 2 x 1 − x 2 \frac{y-y_1}{x-x_1}=\frac{y_1-y_2}{x_1-x_2} x−x1y−y1=x1−x2y1−y2。
- 为了计算方便先统计重复出现的点
- 依次以单点为基础循环计算斜率,如果斜率一致则累计为同一条直线(和基础点重复则跳过、垂直X轴作为特殊情况使用最大值,其他值的计算使用直线公式: k = y 1 − y 2 x 1 − x 2 k=\frac{y_1-y_2}{x_1-x_2} k=<