zoukankan      html  css  js  c++  java
  • Max Points on a Line

    题意:给定n个二维平面上的点,找到某条直线让该直线穿过的点最多,并求出点的个数。

    我的想法:

    固定两个点作为一条直线,然后遍历其他的点看是否在这条直线上,一边遍历一边记录。最后把该直线上的点数和之前的最大点数进行比较,并取较大者。然后取下一条直线进行相同的操作,但要注意重复的情况,不然会超时。

    思路很简单,三个循环便可以完成,时间复杂度达到了n^3。

    贴上代码:

    class Solution {
    public:
        int maxPoints(vector<Point>& points)
        {
            int maxNum = 0;
            if(points.size() < 3)return points.size();
            for(int i = 0;i < points.size();i++)
            {
                for(int j = i + 1;j < points.size();j++)
                {
                    int temMax = 2;
                    while(points[j].x == points[i].x && points[j].y == points[i].y)  //固定的两个点相同,则继续往下取,而且temMax加一
                    {
                        j++;
                        if(j == points.size())
                            break;
                        temMax++;
                    }
                    for(int k = j + 1;k < points.size();k++)
                    {
                        if(points[k].x == points[i].x && points[k].y == points[i].y)
                            temMax++;
                        else if(points[k].x == points[j].x  && points[k].y == points[j].y)
                            temMax++;
                        else if(getK(points[i], points[k]) == getK(points[i], points[j]))
                            temMax++;
                    }
                    if(temMax > maxNum)
                        maxNum = temMax;
                }
            }
            return  maxNum;
        }
    private:
        double getK(Point a, Point b)
        {
            if(a.x == b.x)return MAX_INPUT;
            double k;
            k = (double)(a.y - b.y)/(double)(a.x - b.x);
            return k;
        }
    };

    需要注意的地方:

    1、提交了之后才发现给的测试用例里面有重复的点,大家记得处理这种情况;

    2、处理斜率不存在的情况;

    3、点的个数小于3时直接输出

  • 相关阅读:
    MVC学习中遇到问题
    静态类和单例模式区别
    类或方法名后加<>
    MVC5入门
    开发BI系统时的需求分析研究
    BI项目需求分析书-模板
    商业智能学习系统
    数据库设计三大范式[转]
    BW对应后台表[转]
    SQL优化方案
  • 原文地址:https://www.cnblogs.com/HorribleMe/p/5043640.html
Copyright © 2011-2022 走看看