Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
枚举顶点,计算与这个点在一条线上的点的个数,用map<double,int>来存储与该点相连的直线为某个斜率k的点的个数。
注意有相同点。。。以及斜率为无穷大。。。
O(n²)
/**
* 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:
double maximus = 65535;
int maxPoints(vector<Point> &points) {
int n = points.size();
if(n==0)
return 0;
map<double,int> count;
int same = 0;
int ma = 1;
for(int i=0;i<n-1;i++){
same = 0;
count.clear();
for(int j=i+1;j<n;j++){
if(points[i].x==points[j].x && points[i].y==points[j].y){
same++;
}else{
double k;
if(points[j].x-points[i].x==0)
k=maximus;
else
k = (double)(points[j].y-points[i].y)/(double)(points[j].x-points[i].x);
map<double,int>::iterator it = count.find(k);
if(it!=count.end())
it->second++;
else
count.insert(pair<double,int>(k,2));
}
}
ma = max(ma,1+same);
for(map<double,int>::iterator it = count.begin();it!=count.end();++it){
ma = max(ma,same+it->second);
}
}
return ma;
}
};
ac