lintcode 中等题:Max Points on a Line 最多有多少个点在一条直线上
2015-10-27 17:07
603 查看
题目
样例
给出4个点:
一条直线上的点最多有3个。
解题
直接暴力求解有问题,时间复杂度O(N3),对其中的相同点没有处理,斜率为0,不存在也没有处理,找出运行不对
看到通过定义一个HashMap存储直线的斜率,存在相同的情况就+ 1 ,最后找到斜率个数最长的那个。
下面程序中已经有很多注释了。
Python Code
最多有多少个点在一条直线上
给出二维平面上的n个点,求最多有多少点在同一条直线上。样例
给出4个点:
(1, 2),
(3, 6),
(0, 0),
(1, 3)。
一条直线上的点最多有3个。
解题
直接暴力求解有问题,时间复杂度O(N3),对其中的相同点没有处理,斜率为0,不存在也没有处理,找出运行不对
看到通过定义一个HashMap存储直线的斜率,存在相同的情况就+ 1 ,最后找到斜率个数最长的那个。
下面程序中已经有很多注释了。
# Definition for a point. # class Point: # def __init__(self, a=0, b=0): # self.x = a # self.y = b class Solution: # @param {int[]} points an array of point # @return {int} an integer def maxPoints(self, points): # Write your code here if points == None : return 0 m = len(points) if m <= 2: return m maxline = 0 for i in range(m): dup = 1 d = {} d['inf'] = 0 for j in range((i+1),m): if points[i].x == points[j].x and points[j].y == points[i].y: dup +=1 elif points[j].x == points[i].x: d['inf'] += 1 else: k = 1.0*(points[j].y - points[i].y)/(points[j].x - points[i].x) if k in d: d[k] += 1 else: d[k] = 1 maxline = max( max(d.values()) + dup,maxline) return maxline
Python Code
相关文章推荐
- shell脚本判断文件类型
- Java点滴-List<Integer> list; 中尖括号的意思
- Andriod ListView 滑动到指定项,顶部,底部
- 最简单的观察者模式--转载
- Unity3D的四种坐标系
- 数据库知识点笔记
- 动态设置label的高度
- uboot中,nfs挂载的bootargs
- Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)
- 表单按回车自动提交(转)
- iOS开发UI篇—Quartz2D使用(绘图路径)
- 牛逼的ios在github上的库
- 3.14
- 变更管理、配置管理及风险管理的重点
- HTML5+CSS3学习(-)创建HTML5
- <input type=button> 跳转页面
- 保持优势的16字箴言
- Java设计模式1——策略模式(Strategy Pattern)
- 理解javascript闭包
- 20135223何伟钦-第三章家庭作业