Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
分析:
穷举。
对每个点,建立一个哈希表,记录与其共线的点的数目。
/**
* Definition for a point.
* struct Point {
* int x;
* int y;
* Point() : x(0), y(0) {}
* Point(int a, int b) : x(a), y(b) {}
* };
*/
class Solution {
public:
int maxPoints(vector<Point>& points) {
int n=points.size();
if(n<3) return n;
int res = 0;
double k;
map<double,int> dic;
for(int i=0;i<n-1;++i)
{
int same = 0;
int align = 1;
dic.clear();
for(int j=i+1;j<n;++j)
{
if(points[i].x==points[j].x)
{
if(points[i].y==points[j].y)
{
same++;
continue;
}
else k=std::numeric_limits<double>::infinity();
}
else
k=double(points[j].y-points[i].y)/double(points[j].x-points[i].x);
int cnt=2;
if(dic.find(k)!=dic.end())
cnt = ++dic[k];
else
dic[k]=2;
align = max(align,cnt);
}
res = max(res,same+align);
}
return res;
}
};