zoukankan      html  css  js  c++  java
  • 149. 直线上最多的点数

    给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

    示例 1:

    输入: [[1,1],[2,2],[3,3]]
    输出: 3
    解释:
    ^
    |
    |        o
    |     o
    |  o  
    +------------->
    0  1  2  3 4
    示例 2:

    输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
    输出: 4
    解释:
    ^
    |
    | o
    |     o   o
    |      o
    |  o   o
    +------------------->
    0  1  2  3  4  5  6

    特判有点多,n^2暴力就行了,通过xx/gcd(xx,yy),yy/gcd(xx,yy)能识别唯一的一条直线,和x,y平行的特判下,与i点重合的特判下就可以拉

    class Solution {
    public:
        int maxPoints(vector<vector<int>>& points) {
            if(!(int)points.size())return 0;
            mp.clear();
            flag.clear();
            int ans(0);
            bool flg = 1;
            for(int i=0;i<points.size();++i){
                int zero=0;  
                for(int j=i+1;j<points.size();++j){
                    int x=points[i][0],y=points[i][1],
                    xx=points[j][0],yy=points[j][1];
                    yy-=y,xx-=x;
                 //   cout<<xx <<' '<<yy<<endl;
                    if(xx==0&&yy==0){zero++;continue;}
                    if(!yy){flag[1]++;ans=max(ans,flag[1]);continue;}
                    if(!xx){flag[2]++;ans=max(ans,flag[2]);continue;}
                    int t=__gcd(xx,yy);
                    xx/=t,yy/=t;
                    mp[make_pair(xx,yy)]++;
                    if(ans<mp[make_pair(xx,yy)])flg=1;
                    ans=max(ans,mp[make_pair(xx,yy)]);
                }
                if(flg)ans+=zero,flg=0;
                mp.clear();
                flag.clear();
            }
            return ans+1;
        } 
        map<pair<int,int>,int>mp;
        map<int,int>flag;
    };
  • 相关阅读:
    Spring中的一些常用接口
    ApplicationContextAware的作用
    用spring的 InitializingBean 的 afterPropertiesSet 来初始化
    虚拟机扩容(/dev/mapper/centos-root 空间不足)
    AJAX
    Git
    jQuery
    JS
    JS
    jQuery
  • 原文地址:https://www.cnblogs.com/DreamKill/p/12641737.html
Copyright © 2011-2022 走看看