- 直线上最多的点数
给定一个二维平面,平面上有 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
class Solution {
public://斜率法
int maxPoints(vector<vector<int>>& points) {
int n=points.size();
if(n<=2)
return n;
int res=0;
for(int i=0;i<n-1;i++)
{
unordered_map<string,int> m;
int num=0,ma=0;
for(int j=i+1;j<n;j++)
{
int dx=points[i][0]-points[j][0];
int dy=points[i][1]-points[j][1];
if(dx==0&&dy==0)
{
num++;//重合点
continue;
}
int t=gcd(dx,dy);
string s=to_string(dx/t)+"/"+to_string(dy/t);
m[s]++;
ma=max(ma,m[s]);
}
res=max(res,ma+num);
}
return res+1;
}
int gcd(int x,int y)
{
return y==0?x:gcd(y,x%y);
}
};