侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 149. 直线上最多的点数

Hope
2022-03-03 / 0 评论 / 0 点赞 / 445 阅读 / 595 字
温馨提示:
本文最后更新于 2022-03-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 149. 直线上最多的点数
思路:
对每一个点 ,假定其实中心点,然后枚举每一个点与它构成的直线上的点,同时统计一个与其重合的点,最后的答案就是 直线上的点加上与其重合的点的最大值。枚举直线的时候需要注意的是,垂直的线没有斜率,所以要统计一下 q[0] == p[0]

代码:

class Solution {
public:
    int maxPoints(vector<vector<int>>& points) {
        //枚举中心点
        int res = 0;
        for(auto p : points){
            int SamepointSum =0;
            int SamexpointsSum = 0;
            unordered_map<long double,int> hash;
            for(auto q : points){
                if(p == q) SamepointSum++;
                else if(p[0] == q[0]) SamexpointsSum ++;
                else{
                    long double k = (long double)(q[1] - p[1]) / (q[0] - p[0]);
                    hash[k] ++;
                }
            } 
            int cnt = SamexpointsSum;
            for(auto c : hash) cnt = max(cnt,c.second);
            //答案是 直线上的点 与 与原点重合的点的和 的 最大值
            res = max(res,cnt +SamepointSum);
        }
        return res;

    }
};
0

评论区