码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode】Max Points on a Line

时间:2014-07-06 18:21:01      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   for   io   

Max Points on a Line

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

 

点和方向确定一条直线。

需要两重循环,第一重循环遍历起始点a,第二重循环遍历剩余点b。

a和b如果不重合,就可以确定一条直线。

对于每个点a,构建 斜率->点数 的map。

(1)b与a重合,以a起始的所有直线点数+1

(2)b与a不重合,a与b确定的直线点数+1

 

/**
 * 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.size() < 2)
            return points.size();

        int maxp = 0;

        for(vector<Point>::size_type st1 = 0; st1 < points.size(); st1 ++)
        {
            Point p1 = points[st1];
            map<double, int> lineCount;    //以points[st1]为端点,以ygap/xgap为斜率的直线上有多少个点
            int curmax = 1;
            int dup = 0;
            for(vector<Point>::size_type st2 = st1+1; st2 < points.size(); st2 ++)
            {
                Point p2 = points[st2];
                int xgap = p1.x - p2.x;
                int ygap = p1.y - p2.y;

                if(xgap == 0 && ygap == 0)
                {
                    dup ++;
                }
                else if(xgap == 0)
                {
                    if(lineCount.find(INT_MAX) == lineCount.end())
                    {
                        lineCount.insert(map<double, int>::value_type(INT_MAX, 2));
                        curmax = max(2, curmax);
                    }
                    else
                    {
                        lineCount[INT_MAX] ++;
                        curmax = max(lineCount[INT_MAX], curmax);
                    }
                }
                else
                {
                    double k = ygap*1.0/xgap;
                    if(lineCount.find(k) == lineCount.end())
                    {
                        curmax = max(2, curmax);
                        lineCount.insert(map<double, int>::value_type(k, 2));
                    }
                    else
                    {
                        lineCount[k] ++;
                        curmax = max(lineCount[k], curmax);
                    }
                }
            }
            maxp = max(maxp, curmax+dup);
        }
        return maxp;
    }
};

 

【LeetCode】Max Points on a Line,布布扣,bubuko.com

【LeetCode】Max Points on a Line

标签:style   blog   color   strong   for   io   

原文地址:http://www.cnblogs.com/ganganloveu/p/3825063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!