leetcode 149. 直线上最多的点数

Posted XYQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
};

  

 

 

  

以上是关于leetcode 149. 直线上最多的点数的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 149. 直线上最多的点数

leetcode 149. 直线上最多的点数

Leetcode No.149 直线上最多的点数

2021-09-03:直线上最多的点数。给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。力扣149。(代码片

Leetcode No.149 直线上最多的点数

LeetCode 149 直线上最多的点数[数学 几何 哈希表] HERODING的LeetCode之路