Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
// max_point = max number of [a point and others on a line] = same + same slope
// max_plane = max(max_points)
// 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 res=0;
for(int i=0;i<(int)points.size();i++){
unordered_map<double,int> m;
int same=1;
for(int j=i+1;j<(int)points.size();j++){
if(points[i].x==points[j].x&&points[i].y==points[j].y) same++;
else if(points[i].x==points[j].x&&points[i].y!=points[j].y) m[0xfffffff]++;
else m[(double)(points[i].y-points[j].y)/(double)(points[i].x-points[j].x)]++;
}
int maxx=0;
for(auto k=m.begin();k!=m.end();k++)
maxx=max(maxx,k->second);
res=max(res,maxx+same);
}
return res;
}
};