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时直接输出

  • 相关阅读:
    【.net】从比较两个字节数组谈起
    不靠谱招聘信息大围观 第一季
    微软社区大课堂招募学生
    [WPF]带下拉列表的文本框
    SVN: is scheduled for addition, but is missing
    bootstrap模态框手动开启关闭与设置点击外部不关闭
    PHP实现各种经典算法
    使用vue如何默认选中单选框
    vue使用resource传参数
    视频处理工具FFmpeg的安装(windows/Linux)
  • 原文地址:https://www.cnblogs.com/HorribleMe/p/5043640.html
Copyright © 2011-2022 走看看