这道题1 <= points.length <= 300,所以直接计算任意两点之间的斜率,并把到同一个点相同斜率的点的个数记下来,再和当前结果比较就可以了。时间复杂度 O ( n 2 ) O(n^2) O(n2)。需要注意的斜率为无穷的情况。
class Solution:
def maxPoints(self, points: List[List[int]]) -> int:
l = len(points)
dic = [dict() for i in range(l)]
result = 0
for i in range(l):
for j in range(i+1, l):
if points[j][0]-points[i][0] != 0:
k = (points[j][1]-points[i][1])/(points[j][0]-points[i][0])
else:
k = 'a' # 用于标记斜率为无穷的情况
if k not in dic[i].keys():
dic[i][k] = 1
else:
dic[i][k] += 1
if k not in dic[j].keys():
dic[j][k] = 1
else:
dic[j][k] += 1
result = max(dic[i][k], result)
result = max(dic[j][k], result)
return result+1