https://leetcode.com/problems/max-points-on-a-line/description/
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
Example 1:
Input: [[1,1],[2,2],[3,3]] Output: 3 Explanation: ^ | | o | o | o +-------------> 0 1 2 3 4
Example 2:
Input: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] Output: 4 Explanation: ^ | | o | o o | o | o o +-------------------> 0 1 2 3 4 5 6
class Solution(object):
def maxPoints(self, points):
"""
:type points: List[Point]
:rtype: int
"""
if not points:
return 0
res = 0
cnt = collections.Counter()
for i in xrange(0, len(points)):
pmax, overlap = 0, 0
cnt.clear()
for j in xrange(i+1, len(points)):
x = points[j].x - points[i].x
y = points[j].y - points[i].y
if x == 0 and y == 0:
overlap += 1
continue
gcd = self.gcd(x, y)
x = x / gcd
y = y / gcd
key = str(x) + '_' + str(y)
cnt[key] += 1
pmax = max(pmax, cnt[key])
res = max(res, pmax + overlap + 1)
return res
def gcd(self, a, b):
if b == 0:
return a
return self.gcd(b, a%b)