您的位置:首页 > 其它

[LeetCode] 149. Max Points on a Line

2016-09-11 20:51 363 查看
思路:

对于每个点, 都建造一个哈希表, 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode