Max Points on a Line
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) {}
* };
*/
struct Slop {
int y;
int x;
Slop(Point const & p1, Point const & p2) {
y = p1.y - p2.y;
x = p1.x - p2.x;
if (p1.x < p2.x) {
y = -y;
x = -x;
}
}
bool operator==(Slop const & s) {
return y*s.x == x*s.y;
}
};
bool same(Point const & p1, Point const & p2) {
return p1.x==p2.x && p1.y==p2.y;
}
int maxPoints(vector
&points) {
int i, j, size=(int)points.size(), maxColline = 0;
for (i=0; i
slops;
int verticals = 0;
for (j=i+1; j
bool {return s1.y*s2.x < s2.y*s1.x;});
int maxP = 0, p=slops.empty() ? 0 : 1;
for (j=1; j<(int)slops.size(); j++) {
if (slops[j] == slops[j-1]) {
p++;
}
else {
maxP = max(maxP, p);
p = 1;
}
}
maxColline = max(maxColline, colline + max(verticals, max(maxP, p)));
}
return maxColline;
}