给定一个二维平面,平面上有 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-points-on-a-line
方法:开始遍历点,首先判断两个点是否重合,如果重合,则加1,否则,直接算k,这里没有用除法,主要有两点原因,一是精度问题,而是若k为无穷,无法表示。所以需要重新判断。
(1)两次遍历,开始第一次遍历;
(2)map函数,key是列表,记录dx和dy,value是出现的次数。
(3)如果两个数相等,则为重复点,重复点个数加1,内循环进入下一次,否则计算dx和dy,这里使用最大公约数,来判断,其中最大公约数用迭代的方式求。
(4)内循环结束,首先判断是重复点多,还是其他公点多,这么做是避免只有重复点的特殊情况。
(5)然后在比较,需要注意的是加上重复点。
int res = 0;
for (int i = 0; i < points.size();