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)
{
if(points.size() < 3)
return points.size();
int ans = 0;
for(int i=0; i<points.size(); i++)
{
map<double, int> m;
int same = 1;
for(int j=0; j<points.size(); j++)
{
if(i == j)
continue;
if(points[i].x == points[j].x && points[i].y == points[j].y)
++same;
else
{
double k = 0;
if(points[i].x == points[j].x)
k = INT_MAX;
else
k = 1.0 * (points[j].y - points[i].y) / (points[j].x - points[i].x);
if(m.count(k))
m[k]++;
else
m[k] = 1;
}
}
if(m.size() == 0)
{
ans = max(ans, same);
}
else
{
map<double, int>::iterator it;
for(it=m.begin(); it!=m.end(); ++it)
{
ans = max(ans, same+it->second);
}
}
}
return ans;
}
};