题解 | #直线上的牛#
直线上的牛
https://www.nowcoder.com/practice/58ff4047d6194d2ca4d80869f53fa6ec
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; } };