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) {
if(points.size()<2) return points.size();
int maxNum=0;
map<float,int> tmp_map;
for (int i=0; i < points.size(); i++)
{
tmp_map.clear();
int tmp_max_num=0, same_point_num=0;
for(int j=i+1; j < points.size(); j++)
{
if(points[i].x==points[j].x && points[i].y==points[j].y)//记录相同点
same_point_num++;
else{
float k = numeric_limits<float>::infinity();
if(points[i].y==points[j].y)
tmp_max_num++;
else{
k = (float)(points[i].x - points[j].x)/(points[i].y-points[j].y);
if(tmp_map.find(k) != tmp_map.end())
++tmp_map[k];
else
tmp_map[k] = 1;
}
}
}
map<float,int>::iterator iter = tmp_map.begin();
for(;iter != tmp_map.end(); iter++)
{
if (iter->second > tmp_max_num)
tmp_max_num = iter->second;
}
tmp_max_num += same_point_num;
if(tmp_max_num > maxNum)
maxNum = tmp_max_num;
}
return maxNum+1;//还要加上自己
}
};