博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最多有多少个点在一条直线上
阅读量:7233 次
发布时间:2019-06-29

本文共 1071 字,大约阅读时间需要 3 分钟。

题目:

给出二维平面上的n个点,求最多有多少点在同一条直线上。

样例:

给出4个点:(1, 2), (3, 6), (0, 0), (1, 3)。

一条直线上的点最多有3个。

思路:

选定一个点,分别计算其他点和它构成的直线的斜率,斜率相同的点肯定在同一条直线上。

注意:
1.在计算机里使用double表示斜率,是不严谨的也是不正确的,double有精度误差,double是有限的,斜率是无限的;表示斜率最靠谱的方式是用最简分数,即分子分母都无法再约分了。分子分母同时除以他们的最大公约数gcd即可得到最简分数。
2.注意重合点
3.注意斜率无穷大的,$tan=(y_1-y_2)/(x_1-x_2)$$,所以用一个pair存储分子分母就好了。

参考答案:

/** * Definition for a point. * struct Point { *     int x; *     int y; *     Point() : x(0), y(0) {} *     Point(int a, int b) : x(a), y(b) {} * }; */class Solution {public:    /*     * @param points: an array of point     * @return: An integer     */    int maxPoints(vector
&points) { // write your code here int res = 0; for(int i=0; i
, int> m; int common = 1;//记录相同点的个数 for(int j = i+1; j
,int>::iterator it; for(it = m.begin(); it != m.end(); it++){ res = max(res, it->second+common); } } return res; } int gcd(int a, int b){//a,b最大公约数 return (b==0) ? a : gcd(b, a%b); }};

转载地址:http://ukvfm.baihongyu.com/

你可能感兴趣的文章
EUPL v1.2 将兼容 GPL
查看>>
2013第3周获取本地IP代码及文章摘录
查看>>
Castle~动态代理实现对方法的拦截
查看>>
YII适合做后台的一个扩展
查看>>
FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
同步和异步消息机制
查看>>
Android-x86 4.2 发布,基于 Android 4.2.2
查看>>
有关LOGO设计软件
查看>>
模拟搜索结果项
查看>>
Waiting For KKSFBC CHILD COMPLETION?
查看>>
ASP.NET MVC Part.1(创建基本的 MVC 应用程序)
查看>>
批量删除数据库中指定表的t-sql脚本
查看>>
闯迷宫
查看>>
Heritrix 3.1.0 源码解析(八)
查看>>
宋体文件C#读取CSV文件-java教程
查看>>
建立一个windows服务(可用于实现计划任务,事件监控..) .NET
查看>>
提示命令命令行将U盘文件系统转换成ntfs
查看>>
腰围2尺1,2,3,4,5,6,7,8寸分别等于是多少厘米/英寸(对照表)
查看>>
hdu 2874 Connections between cities
查看>>
ASP.NET过滤器的应用
查看>>