Max Points on a Line

来源:互联网 发布:js获取radio是否选中 编辑:程序博客网 时间:2024/06/07 16:04

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

思路:通过求最大公约数来求直线的斜率,并且记录下来,斜率相同即在同一直线上。

class Solution {public:int maxPoints(vector<Point>& points) {        int res = 0;        for (int i = 0; i < points.size(); ++i) {            map<pair<int, int>, int> m;            int duplicate = 1;            for (int j = i + 1; j < points.size(); ++j) {                if (points[i].x == points[j].x && points[i].y == points[j].y) {                    ++duplicate;                     continue;                }                 int dx = points[j].x - points[i].x;                int dy = points[j].y - points[i].y;                int d = gcd(dx, dy);                ++m[{dx / d, dy / d}];            }            res = max(res, duplicate);            for (auto it = m.begin(); it != m.end(); ++it) {                res = max(res, it->second + duplicate);            }        }        return res;    }    int gcd(int a, int b) {        return (b == 0) ? a : gcd(b, a % b);    }   };
原创粉丝点击