- 直线上最多的点数
给定一个二维平面,平面上有 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
题解
中文界面没有说明数据范围,得看英文界面。
然后就是很简单的判断,两个点确定一条直线,然后判断第3个点是否属于这条直线就行,不要用除法判断,存在精度问题,用乘法判断比较好。
AC代码
class Solution {
public:
vector<vector<int>>q;
int maxPoints(vector<vector<int>>& points) {
for(int i=0;i<points.size();i++)
{
for(int j=i+1;j<points.size();j++)
{
vector<int>t;
t.push_back(points[i][0]);
t.push_back(points[i][1]);
t.push_back(points[j][0]);
t.push_back(points[j][1]);
q.push_back(t);
}
}
int mx=0;
for(int i=0;i<q.size();i++)
{
int ans=0;
for(int j=0;j<points.size();j++)
{
if((q[i][0]-q[i][2])*(points[j][1]-q[i][3])==(points[j][0]-q[i][2])*(q[i][1]-q[i][3]))
ans+=1;
}
if(ans>mx)
mx=ans;
}
return mx==0?1:mx;
}
};