题目链接
英文链接:https://leetcode.com/problems/max-points-on-a-line/
中文链接:https://leetcode-cn.com/problems/max-points-on-a-line/
题目详述
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
示例 1:
1 | 输入: [[1,1],[2,2],[3,3]] |
示例 2:
1 | 输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] |
题目详解
- 先枚举一个定点,然后将其它点按斜率分组,斜率指与定点连线的斜率,分组可以利用哈希表。
由于一个定点加斜率可以唯一确定一条直线,所以被分到同一组的点都在一条直线上。组中点数的最大值就是答案。 - 上述做法存在的一些问题:
- 由于斜率是一个浮点数,可能存在精度问题。
- 竖直直线斜率不存在,需要单独处理。
- 与定点重合的点可以被分到所有组中,需要单独处理。
- 为了简化问题,我们可以换一种方式表示斜率,用它的最简分数(除以
gcd
之后的值)来表示斜率,这样可以解决浮点数精度问题,并且可以解决斜率不存在的表示问题。定义一个Slope
类来表示这个最简分数。 - 时间复杂度为
O(n^2)
。
1 | public class LeetCode_00149 { |