LeetCode__Max Points on a Line

来源:互联网 发布:战舰世界数据 编辑:程序博客网 时间:2024/06/01 17:07

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);}};



0 0