LeetCode 149. Max Points on a Line

来源:互联网 发布:积分兑换商城源码 php 编辑:程序博客网 时间:2024/04/20 11:17

Problem Statement

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

Solution

Tags: Hash Table, Math.

Note: In Java version of pre-defined code, coordinates of points are pre-defined as integers. So I assume the same applies here in python version.

class Solution(object):    def maxPoints(self, points):        """        :type points: List[Point]        :rtype: int        """        res = 0        n = len(points)        for i in xrange(n):            memo = {}            duplicate = 0            for j in xrange(n):                if (points[j].x, points[j].y) == (points[i].x, points[i].y):                    duplicate += 1                elif points[j].x == points[i].x:                    memo['v'] = memo.get('v', 0) + 1                elif points[j].y == points[i].y:                    memo['h'] = memo.get('h', 0) + 1                else:                    k = self.slope(points[i], points[j])                    memo[k] = memo.get(k, 0) + 1            res = max(res, max(memo.values()) + duplicate if memo else duplicate)        return res    def gcd(self, x, y):        while x % y: x, y = y, x%y        return y    def slope(self, p1, p2):        res = ''        flag = 1        x = p1.x - p2.x        y = p1.y - p2.y        if x < 0:            flag *= -1            x = -x        if y < 0:            flag *= -1            y = -y        m = self.gcd(x, y)        if flag == -1:            res='-'        res += (str(x/m) + '/' + str(y/m))        return res

Complexity analysis:

  • Time complexity: O(n2gcd). For time complexity analysis of gcd, see below reference.

References

(1) Time complexity of Euclid’s Algorithm.

0 0
原创粉丝点击