from collections import defaultdict def gradient(a, b): if a.x == b.x: return float('inf') return float(a.y - b.y) / float(a.x - b.x) class Solution(object): def maxPoints(self, points): if len(points) < 2: # because fuck you return len(points) m = 2 for a in points: gradients = defaultdict(int) same = 0 for b in points: if (a.x == b.x) and (a.y == b.y): # because fuck you, too same += 1 else: gradients[gradient(a, b)] += 1 _m = same if len(gradients) > 0: _m += max(gradients.values()) m = max(m, _m) return m