Max Points on a Line -- leetcode

来源:互联网 发布:淘宝中国知网账号 编辑:程序博客网 时间:2024/05/22 01:50

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


基本思路:

本题是求解,在同一条直线上点的个数。最大值。

2点,能确定一条直线。 而判断第三点,是否位于该值线上。需要用到斜率。

即选定一个点,为基准点。 其他点,都对该点求斜率。 斜率相同的点,将位于一条直线。  

求斜率所要特殊注意的是, 一种是,与基础点完全一样的点。因为分母分子都会为0.

另一种是,与基础点,垂直的点。因为分母会为0. 


在leetcode上实际执行时间为28ms。

/** * Definition for a point. * struct Point { *     int x; *     int y; *     Point() : x(0), y(0) {} *     Point(int a, int b) : x(a), y(b) {} * }; */class Solution {public:    int maxPoints(vector<Point>& points) {        if (points.empty())            return 0;        int ans = 0;        unordered_map<double, int> slopes;        for (int i=0; i<points.size(); i++) {            slopes.clear();            int verticals = 0;            int duplicates = 0;            int local = 0;            for (int j=i+1; j<points.size(); j++) {                if (points[i].x == points[j].x) {                    if (points[i].y == points[j].y)                        ++duplicates;                    else                        ++verticals;                }                else {                    const double slope = double(points[j].y - points[i].y) / (points[j].x-points[i].x);                    ++slopes[slope];                    local = max(local, slopes[slope]);                }            }            local = max(local, verticals);            local += duplicates;            ans = max(ans, local);        }        return ans+1;    }};


0 0
原创粉丝点击