class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param points int整型vector<vector<>>
* @return int整型
*/
int maxPoints(vector<vector<int> >& points) {
// write code here
// double为斜率,后面存储坐标点
map<double,set<pair<double,double>>> m_1;
// 处理共竖线和共横线的情况;
map<string,set<pair<double,double>>> m_2;
// 第i个点
for(int i=0; i<points.size(); ++i)
{
double x_1 = (double)points[i][0];
double y_1 = (double)points[i][1];
// i之后的点
for(int j=i+1; j<points.size(); ++j)
{
double x_2 = (double)points[j][0];
double y_2 = (double)points[j][1];
// 两点之间的坐标距
double x_len = x_2-x_1;
double y_len = y_2-y_1;
// 共竖线
if(x_len==0)
{
m_2["sameX"].emplace(make_pair(x_1,y_1));
m_2["sameX"].emplace(make_pair(x_2,y_2));
}
// 共横线
else if(y_len==0)
{
m_2["sameY"].emplace(make_pair(x_1,y_1));
m_2["sameY"].emplace(make_pair(x_2,y_2));
}
// 其它斜率
else
{
m_1[y_len/x_len].emplace(make_pair(x_1,y_1));
m_1[y_len/x_len].emplace(make_pair(x_2,y_2));
}
}
}
int ans = 0;
for(auto it=m_1.begin(); it!=m_1.end(); ++it)
ans = max(ans,(int)(it->second).size());
ans = max(ans,(int)m_2["sameX"].size());
ans = max(ans,(int)m_2["sameY"].size());
return ans;
}
};