zoukankan      html  css  js  c++  java
  • 【leetcode】Max Points on a Line

    Max Points on a Line

    题目描述:

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

    解题思路:

    1.首先由这么一个O(n^3)的方法,也就是算出每条线的方程(n^2),然后判断有多少点在每条线上(N)。这个方法肯定是可行的,只是复杂度太高
    2.然后想到一个O(N)的,对每一个点,分别计算这个点和其他所有点构成的斜率,具有相同斜率最多的点所构成的直线,就是具有最多点的直线。

    注意的地方:

    1.重合的点
    2.斜率不存在的点

     1 # Definition for a point
     2 class Point:
     3     def __init__(self, a=0, b=0):
     4         self.x = a
     5         self.y = b
     6 
     7 class Solution:
     8     # @param points, a list of Points
     9     # @return an integer
    10     def calcK(self,pa, pb):
    11         t = ((pb.y - pa.y) * 1.0) / (pb.x - pa.x)
    12         return t
    13         
    14     def maxPoints(self, points):
    15         l = len(points)
    16         res = 0
    17         if l <= 2:
    18             return l 
    19         for i in xrange(l):
    20             same = 0
    21             k = {}
    22             k['inf'] = 0
    23             for j in xrange(l):
    24                 if points[j].x == points[i].x and points[j].y != points[i].y:
    25                     k['inf'] += 1
    26                 elif points[j].x == points[i].x and points[j].y == points[i].y:
    27                     same +=1
    28                 else:
    29                     t = self.calcK(points[j],points[i])
    30                     if t not in k.keys():
    31                         k[t] = 1
    32                     else:
    33                         k[t] += 1
    34             res = max(res, max(k.values())+same)
    35         return res
    36         
    37 def main():
    38     points = []
    39     points.append(Point(0,0))
    40     points.append(Point(1,1))
    41     points.append(Point(1,-1))
    42     #points.append(Point(0,0))
    43     #points.append(Point(1,1))
    44     #points.append(Point(0,0))
    45     s = Solution()
    46     print s.maxPoints(points)
    47     
    48     
    49 if __name__ == '__main__':
    50     main()
    51         
  • 相关阅读:
    客户端及服务端_终端模拟
    安装-homebrew
    客户端及服务端_网页访问
    python server搭建
    ping不通localhost但是可以ping通ip地址
    CentOS7 修改Jenkins以root用户运行
    tomcat配置外部静态资源映射路径(windows和Linux部署)
    Centos 6.10 安装 Jenkins
    axios ios 微信浏览器session问题
    微信公众号 分享接口 签名通过 分享无效果(JSSDK自定义分享接口的策略调整)
  • 原文地址:https://www.cnblogs.com/MrLJC/p/4118069.html
Copyright © 2011-2022 走看看