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 n = points.size();
if(n == 0)return 0;
if(n == 1)return 1;
int count = 1;
for(int i = 0; i < n; i++)
{
vector<double> k;
int x = 1;
int xy = 1;
int duplicate = 1;
for (int j = i+1; j < n; j++)
{
if((points[i].x == points[j].x)&&(points[i].y == points[j].y))
{
duplicate++;
xy++;
}
else if(points[i].x == points[j].x) x++;
else
{
double a = (double)(points[i].y - points[j].y)/(points[i].x - points[j].x);
k.push_back(a);
}
}
int m = k.size();
sort(k.begin(),k.end());
int c = duplicate + 1;
for(int j = 0; j < m-1; j++)
{
if(fabs(k[j] - k[j+1]) < 0.0001) c++;
else
{
if (c > xy) xy = c;
c = duplicate + 1;
}
}
if ((c > xy)&&(m != 0)) xy = c;
int temp = max(xy, x);
count = max(temp, count);
}
return count;
}
};