class Solution {
public:
int maxPoints(vector<Point> &points) {
if(points.size() <= 2) return points.size();
int maxpoint = 0;
unordered_map<double, int> hash;
for(int i=0; i<points.size()-1; i++)
{
hash.clear();
int same = 0;
int infinity = 1;
int curmax = 0;
for(int j=i+1; j<points.size(); j++)
{
if(points[j].x == points[i].x)
{
if(points[j].y == points[i].y)
same++;
else
infinity++;
}
else
{
double slope = 1.0*(points[j].y - points[i].y)/(points[j].x - points[i].x);
if(hash.count(slope) > 0)
hash[slope]++;
else
hash[slope] = 2;
curmax = max(curmax, hash[slope]);
}
}
curmax = max(curmax, infinity);
curmax += same;
maxpoint = max(maxpoint, curmax);
}
return maxpoint;
}
};
infinity代表无穷大的slope。