AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 更多
    • 题解
    • 分享
    • 商店
    • 问答
  • 吐槽
  • 登录/注册

LeetCode 149. 直线上最多的点数

作者: 作者的头像   Oyasumi1024 ,  2023-01-25 15:58:24 ,  所有人可见 ,  阅读 8


0


class Solution {
public:
    int maxPoints(vector<vector<int>>& points) {
        typedef long double LD;
        int res = 0;
        for (auto &p : points)
        {
            int ss = 0, vs = 0; // 重叠的点数、垂直的点数
            unordered_map<LD, int> cnt; // 斜率 该斜率表示的直线上的点数
            for (auto &q : points)
            {
                if (p == q )    ss ++ ;     // 重点
                else if (p[0] == q[0])  vs ++ ; // 垂直线
                else
                {
                    LD k = (LD)(p[1] - q[1]) / (p[0] - q[0]);   // 斜率k
                    cnt[k] ++ ;     // 该斜率表示的直线上的点数+1
                } 
            }
            // 计算以p点为中心点的最多的共线的点的数量 先不加重叠的点,最后再统一加上
            int c = vs;
            for (auto &[k, v] : cnt )   c = max(c, v);
            res = max(res, c + ss);
        }

        return res;
    }
};

0 评论

你确定删除吗?
1024
x

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息