Max Points on a Line
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
求二维平面内在同一直线上的点的最大数量,不是很难,但是我错了好多遍,还是细节处理不好。
思想很简单:按照冒泡的顺序,依次求每个点和后面各个点的斜率,利用python中字典的key的hash特性存储并计算不同斜率的数量,数量最多的说明该直线上点最多。
<span style="font-size:14px;"># 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):
result = 0
length = len(points)
for i in range(length):
mx = 0
same = 0
number = {}
for j in range(i+1, length):
x = points[j].x - points[i].x;
y = points[j].y - points[i].y;
g = gcd(x, y)
if g!=0:
x /= g
y /= g
k = str(x)+' '+str(y)
if k in number.keys():
number[k] += 1
else:
number[k] = 1
mx = max(mx, number[k])
else:
same += 1
continue
result = max(result, mx+same+1)
return result
def gcd(a, b):
return gcd(b%a, a) if a else b</span>