Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
Saw this type of code, while, similar idea of my code, but much better in handling the 'inf' slope and same point count case.
# Definition for a point
# 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 <= 2:
return length
max_num = -1
for row in range(length):
slope = dict()
samepoint_cnt = 0
for col in range(length):
if row == col:
continue
# same point
if points[row].x == points[col].x and points[row].y == points[col].y:
samepoint_cnt += 1
slope['samepoint'] = 0
# slopt inf
elif points[row].x == points[col].x and points[row].y != points[col].y:
if 'inf' not in slope.keys():
slope['inf'] = 1
else:
slope['inf'] += 1
# normal slope
else:
k = (points[row].y - points[col].y) / float((points[row].x - points[col].x))
if k not in slope.keys():
slope[k] = 1
else:
slope[k] += 1
max_num = max(max_num, max(slope.values()) + 1 + samepoint_cnt)
return max_num