【问题】
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
【思路】
对每一个点,分别计算这个点和其他所有点构成的斜率,具有相同斜率最多的点所构成的直线,就是具有最多点的直线。
【代码】
class Point:
def __init__(self, a=0, b=0):
self.x = a
self.y = b
class Solution:
# @param points, a list of Points
# @return an integer
def maxPoints(self, points):
length = len(points)
if length < 3:
return length
res = -1
for i in xrange(length):
slope = {'inf': 0}
samePointNum = 1
for j in xrange(length):
if i == j:
continue
elif points[i].x == points[j].x and points[i].y != points[j].y:
slope['inf'] +=1
elif points[i].x != points[j].x:
k = 1.0 * (points[j].y - points[i].y) / (points[j].x - points[i].x)
slope[k] = 1 if k not in slope.keys() else slope[k] + 1
else:
samePointNum += 1
res = max(res, max(slope.values()) + samePointNum)
return res