leetcode-149. 直线上最多的点数(map+判重)[通俗易懂]

leetcode-149. 直线上最多的点数(map+判重)[通俗易懂]给定一个二维平面,平面上有 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+—–

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定一个二维平面,平面上有 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
const double eps = 1e-10;
const int N = 1e3 + 10;
bool cmp(const double &a,const double &b){ 
   
    return abs(a - b) < eps;
}
struct Node{ 
   
    double k;
    Node(double _k){ 
   
        k = _k;
    }
    bool operator<(const Node &b)const{ 
   
        if(cmp(k,b.k))return false;
        else return k < b.k;
    }
};
class Solution { 
   
public:
    map<Node,int>m;
    int maxPoints(vector<vector<int>>& points) { 
   
        int ans = 0;
        int n = points.size();
        if(n == 1 || n == 0)return n;
        for(int i = 0;i < n;i ++){ 
   
            m.clear();
            int same = 0;
            for(int j = 0;j < n;j ++){ 
   
                if(j == i)continue;
                int x1 = points[i][0],y1 = points[i][1];
                int x2 = points[j][0],y2 = points[j][1];
                if(x1 == x2){ 
   
                    same ++;
                    continue;
                }
                Node t(double(y1 - y2) / (x1 - x2));
                if(m.find(t) == m.end())m[t] = 0;
                m[t] ++;
            }
            for(auto &a : m){ 
   
                ans = max(ans,a.second);
            }
            ans = max(ans,same);
        }
        return ans + 1;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169067.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm怎么配置python环境anaconda_编译环境是什么

    pycharm怎么配置python环境anaconda_编译环境是什么1.介绍Python:一种解释型、面向对象、动态数据类型的高级程序设计语言。PyCharm:一款好用的集成开发环境。Conda:Python环境管理器,方便我们管理和切换编程环境。2.下载2.1Conda下载Miniconda下载链接Anaconda下载链接Miniconda是Anaconda的压缩版,Miniconda只包含conda的核心内容,Anaconda中包含了Spyder集成开发环境等扩充内容。Miniconda的功能足矣。根据计算机的实际情况选择下载安装包,上图中Py

    2022年8月26日
    5
  • 关于Python缩进,我们该了解哪些?

    关于Python缩进,我们该了解哪些?Python是一门独特的语言,它的代码块是通过缩进(Indentation)来标记的(大部分语言都是使用花括号作为代码块的标记),具有相同缩进的多行代码属于同一个代码块。如果代码莫名其妙的乱缩进,Py

    2022年7月5日
    24
  • java键盘钩子_jna test【鼠标 键盘钩子】「建议收藏」

    java键盘钩子_jna test【鼠标 键盘钩子】「建议收藏」jna4.5简单实现后台键盘事件通过jna实现在后台运行,当屏幕按下相对应的按钮时JAVA实现鼠标钩子的源代码仅用JAVA实现全局鼠标钩子的功能,很好很超强,学习下java全局按键键盘钩子java鼠标按键钩子,内含test.java使用实例,hook文件夹是写好的钩子,放到项目源文件下,直接调用。两个jar包是必须建立到项目中的c#Wpf简单鼠标钩子实例一个简单的鼠标钩子例子帮助初学者掌握。基于…

    2022年6月12日
    105
  • 初识js中的闭包_Js闭包中变量理解

    初识js中的闭包_Js闭包中变量理解今天看了关于js闭包方面的文章,还是有些云里雾里,对于一个菜鸟来说,学习闭包确实有一定的难度,不说别的,能够在网上找到一篇优秀的是那样的不易。当然之所以闭包难理解,个人觉得是基础知识掌握的不牢,因为

    2022年8月6日
    12
  • useGeneratedKeys和keyProperty

    useGeneratedKeys和keyProperty<!–useGeneratedKeys:仅适用于insert和update)这会令MyBatis使用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键(比如:像MySQL和SQLServer这样的关系型数据库管理系统的自动递增字段),默认值:false。说白了就是使用自增主键,增加的时候自动使用自增主键–><!–keyProperty:使用主键自增之后,就无法拿到主键,但是需要使

    2022年6月20日
    29
  • oracle存储过程递归调用_函数的间接递归调用

    oracle存储过程递归调用_函数的间接递归调用存储过程和函数一样也可以递归调用,调用方法类似。如下是求某个数以内的数字求和:CREATEPROCEDUREaProc_Test@INPUTint,@SumintoutputASBEGINSETNOCOUNTON;if(@Sumisnull) set@Sum=0if(@INPUT&gt;0)begin …

    2022年9月25日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号