题目:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
思想:循环遍历所有点,每次循环以同一个点为起点,与其他点形成直线,以斜率k的值为map中的key。需要注意的地方是:计算重复点数。
/**
* 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 max=0;
float k;//斜率
vector<Point>::iterator iter1;
vector<Point>::iterator iter2;
map<float,int>::iterator it;
map<float,int> map1;
int duplicate=0;//重复点数
for(iter1= points.begin(); iter1 != points.end(); ++iter1)
{
for(iter2= points.begin(); iter2 != points.end(); ++iter2)
{
if((*iter1).x==(*iter2).x&&(*iter1).y==(*iter2).y)
{
duplicate++;
continue;
}
float a=(float)((*iter1).y-(*iter2).y);
float b=(float)((*iter1).x-(*iter2).x);
if(b==0)
{
k=k=numeric_limits<float>::max() ;
}
else
{
k=a/b;
}
map1[k]++;
}
it=map1.begin();
if(it==map1.end())
{
return duplicate;
}
for(;it!=map1.end();it++)
{
if((*it).second+duplicate>max)
{
max=(*it).second+duplicate;
}
}
map1.clear();
duplicate=0;
}
return max;
}
};