Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
写的简洁还是需要功底的
# Definition for a point.
class Point:
def __init__(self, a=0, b=0):
self.x = a
self.y = b
import numpy as np
# consider same and inf slope in the loop is also ok
class Solution:
def maxPoints(self, points):
"""
:type points: List[Point]
:rtype: int
"""
l = len(points)
m = 0
for i in range(l):
ix, iy = points[i].x, points[i].y
same, d, slope = 1, {}, -1
for j in range(i+1,l):
jx, jy = points[j].x, points[j].y
if ix==jx and iy==jy:
same+=1
continue
elif ix==jx: slope='inf'
else: slope=((iy-jy)*np.longdouble(1))/(ix-jx)
d[slope] = d.get(slope, 0)+1
m = max(m, (max(d.values()) if d else 0)+same)
return m
s=Solution()
print(s.maxPoints([Point(0,0),Point(94911151,94911150),Point(94911152,94911151)]))