leetcode 149: 直线上最多的点数

给定一个二维平面,平面上有 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

这道题很自然就能想到计算斜率,哈希表存储,但是需要注意几个点:
1、斜率无穷大的特殊情况
2、有相同点的情况
3、特殊测试用例:[[0,0],[94911151,94911150],[94911152,94911151]] 浮点数精度不够

解决方案:
1、哈希表加一个键
2、用same存储相同点的个数
3、用dx/dy代替dy/dx可以去除这种浮点数精度不够的情况,但只是针对这一个样例;另一个方法:使用Decimal。

from decimal import Decimal
Decimal((point[1][1] - point[0][1]))/Decimal((point[1][0] - point[0][0]))

牺牲了一些计算上的耗时。

完整代码:

class Solution(object):
    def maxPoints(self, points):
        """
        :type points: List[List[int]]
        :rtype: int
        """
        length = len(points)
        if length < 3: return length
        max_points = 0
        for i in range(length):
            d = {'inf':0}
            same = 1
            for j in range(i,length):
                if i == j:
                    continue
                if points[i][1] == points[j][1] and points[i][0] != points[j][0]:
                    d['inf'] += 1
                elif points[i][0] != points[j][0]:
                    k = 1.0 * (points[i][0] - points[j][0])/(points[i][1] - points[j][1])
                    if k not in d:
                        d[k] = 1
                    else:
                        d[k] += 1
                else:
                    same += 1 
            max_points = max(max_points, max(d.values()) + same)
        return max_points
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个二维平面,平面上有n个点,求最多有多少个点在同一条直线上。 分析: 暴力破解 根据两点确定一条直线原理,我...
    枫叶忆阅读 645评论 0 1
  • 在编程中我们总要进行一些数学运算以及数字处理,尤其是浮点数的运算和处理,这篇文章主要介绍C语言下的数学库。而其他语...
    欧阳大哥2013阅读 5,347评论 0 12
  • 引言 下面的一段简单程序 0.3 + 0.6 结果是什么? 有人会天真的认为是0.9,但实际输出却是0.89999...
    唯识相链2阅读 1,612评论 0 0
  • 定点小数运算 来自:http://www.eepw.com.cn/article/17893.htm 在DSP世界...
    郝宇峰阅读 9,354评论 0 2
  • 昨天早上我早早起床,妈妈就带我去化妆,今天早上跳舞班要考级,全校同学都要参加,不过有些人不参加。 ...
    张思蕊阅读 85评论 0 0