思路:
对于每个点, 都建造一个哈希表, key是其他剩下的点跟该点组成的直线的斜率, value是该斜率上的点的记数. 但要记得需要额外的变量记录重复点的个数和垂直于x轴的直线上的点的个数. 这些要特殊记录的.
int maxPoints(vector<Point>& points) {
unordered_map<double, int> m;
int res = 0;
for (int i = 0; i < points.size(); i++) {
int dup = 1;
int vertical = 1;
for (int j = i + 1; j < points.size(); j++) {
Point p1 = points[i];
Point p2 = points[j];
if (p1.x == p2.x) {
if (p1.y == p2.y)
dup++;
else
vertical++;
}
else {
double slope = (p2.y - p1.y) * 1.0 / (p2.x - p1.x);
m[slope]++;
}
}
int cur = 0;
for (pair<double, int> p : m)
cur = max(cur, p.second);
res = max(res, cur + dup);
res = max(res, vertical);
m.clear();
}
return res;
}