您的位置:首页 > 其它

LeetCode__Max Points on a Line

2014-07-07 20:18 381 查看
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.


题意:是在二维平面上给出一系列点,要求最大的共线的点的数量。

首先想到平面上的点共线的定义,即穿过共同点且斜率相同。因此我们可以遍历每个点,找出其他点和这个点构成的直线的斜率,并用一个map记录下这个斜率下的点的数量。注意平面上相同的点要特殊处理。

class Solution {
public:
int maxPoints(vector<Point> &points) {
if (points.size() == 0)
return 0;
int MAX = 1;
map<double, int> maps;
vector<Point>::iterator p;
vector<Point>::iterator q;
for (p = points.begin(); p != points.end(); ++p)
{
maps.clear();
int count = 1;
for (q = p + 1; q != points.end(); ++q)
{
if (p->x == q->x && p->y == q->y)
++count;
else
++maps[Slope(p, q)];
}
int temp = 0;
for (map<double, int>::iterator t = maps.begin(); t != maps.end(); ++t)
{
if (t->second > temp)
temp = t->second;
}
MAX = (count + temp) > MAX ? (count + temp) : MAX;
}
return MAX;
}
private:
double Slope(vector<Point>::iterator p, vector<Point>::iterator q)
{
if (p->x == q->x)
return numeric_limits<double>::max();
return static_cast<double>(p->y - q->y) / static_cast<double>(p->x - q->x);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: