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
s=points.size();
int
max=
0
;
double
k;
if
(s<=
2
)
return
s;
for
(
int
i=
0
;i<s;i++)
{
for
(
int
j=i+
1
;j<s;j++)
{
int
count=
0
;
bool temp=
true
;
int
x1=points[i].x-points[j].x;
int
y1=points[i].y-points[j].y;
if
(x1==
0
)
temp=
false
;
else
k=y1/(x1*
1.0
);
for
(
int
t=
0
;t<s;t++)
{
if
(temp)
{
if
(points[t].x==points[j].x && points[t].y==points[j].y)
count++;
else
{
double
k_value=(points[j].y-points[t].y)/((points[j].x-points[t].x)*
1.0
);
if
(k == k_value)
count++;
}
}
else
{
if
(points[t].x==points[j].x)
count++;
}
}
if
(max<=count)
max=count;
}
}
return
max;
}
};