Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
题意是给定N个点,找到共线的点最多有多少个,求固定一个点points[i],求points[i]与points[j]之间的斜率,统计斜率出现的次数,注意斜率不存在的情况。
/**
* 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) {
map<float,int> result;
int maxnum = 0;
int repeat;
for(int i=0; i<points.size(); i++)
{
result.clear();
repeat = 1;
result[INT_MAX]=0;
for(int j=0; j<points.size(); j++)
{
if(i==j) continue;
if(points[i].x==points[j].x&&points[i].y==points[j].y)
{
repeat++;
continue;
}
float temp =points[i].x==points[j].x?INT_MAX:float(points[i].y-points[j].y)/(points[i].x-points[j].x);
result[temp]++;
}
map<float,int>::iterator it;
for(it = result.begin(); it!=result.end(); it++)
{
if((it->second+repeat)>maxnum)
{
maxnum = it->second+repeat;
}
}
}
return maxnum;
}
};