/**
* 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) {
//key - value; key: slope(double); value : times(int);
map<double, set<int>> rm;
map<double, set<int>>::iterator itr_rm;
set<int> vtimes;
map<int,int> same_value;// key(point id) - value(the same point with this point with point id);
/* map<map<int,int>,int> same_map;
for(int k = 0;k<points.size();++k)
{
same_map[]
}*/
// int vtimes = 0;
if (points.size() == 1)
{
return 1;
}
//
if(points.size() == 0)
{
return 0;
}
for (int i = 0; i < points.size(); ++i)
for (int j = i+1; j < points.size(); ++j)
{
if(points[i].x - points[j].x == 0 && points[i].y == points[j].y)
{
same_value[i]++;
}
if (points[i].x - points[j].x == 0 && points[i].y != points[j].y)
{
vtimes.insert(j);
}
else
{
double slope = (points[i].y - points[j].y) / (points[i].x - points[j].x);
rm[slope].insert(j);// value = rm[key];
}
}
int max = 0;
for (itr_rm = rm.begin(); itr_rm != rm.end(); ++itr_rm)
{
if (itr_rm->second.size() >= max)
{
max = itr_rm->second.size();
}
}
if(max ==0 && vtimes.size()==0)
{
return 0;
}
else
{
return (max + 1) > (vtimes.size() + 1) ? (max + 1) : (vtimes.size() + 1);
}
}
};