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

    这题卡了好长时间,心态崩了呀,,,

    最开始把斜率当作直线,我真是脑抽,表示一条直线用斜率 k + 截距 b 就可以了。

    但是要注意,如果两点x值相等,那么我们斜率为正无穷,为了能表示不同的与x轴垂直直线,用x坐标表示一条与x轴垂直的直线;如果两点y值相等,那么我们的斜率为0,为了表示,则用y值表示不同的直线。

    对于一般直线就用k b表示,题中的数据有坑的地方,两点相等也是同一条直线,我们用不同的下标区分坐标相同的点就可以了。

    class Solution {
    public:
        int maxPoints(vector<vector<int>>& points) {
            if (points.size()==1||points.size()==0) return points.size();
            vector<vector<int> >& p=points;
            map<long double,set<int> > x,y;
            map<pair<long double,long double>,set<int> > mp;
            int sz=points.size();
            for (int i=0;i<sz;i++) {
                for (int j=i+1;j<sz;j++) {
                    if (p[i][0]==p[j][0]) {
                        x[p[i][0]].insert(i);
                        x[p[i][0]].insert(j);
                    }
                    else if (p[i][1]==p[j][1]) {
                        y[p[i][1]].insert(i);
                        y[p[i][1]].insert(j);
                    }
                    else {
                        long double k=(long double)(p[i][1]-p[j][1])/(long double)(p[i][0]-p[j][0]);
                        long double b=p[i][1]-k*p[i][0];
                        mp[make_pair(k,b)].insert(i);
                        mp[make_pair(k,b)].insert(j);
                    }
                }
            }
            int ans=0;
            for (auto p: x) {
                int tmp=p.second.size();ans=max(ans,tmp);
            }
            for (auto p: y) {
                int tmp=p.second.size();ans=max(ans,tmp);
            }
            for (auto p: mp) {
                int tmp=p.second.size();ans=max(ans,tmp);
            }
            return ans;
        }
    };
    

      

     

      

  • 相关阅读:
    Matlab smooth函数原理
    Pandas中的高级索引loc、iloc、ix精简概括
    QT常见错误:"multiple definition of xxx"
    Github术语解释
    数据反转 LSB
    LSB最低有效位和MSB最高有效位
    Modbus通信CRC16校验程序
    CRC16常见几个标准的算法及C语言实现
    DB9 公头母头引脚定义及连接
    hdu 2577 How to Type(dp)
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/12234018.html
Copyright © 2011-2022 走看看