力扣的直线上最多的点数 解法 (Python3)
题目描述:
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
示例 1:
输入: [[1,1],[2,2],[3,3]]
输出: 3
解释:
^
|
| o
| o
| o
±------------>
0 1 2 3 4
示例 2:
输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出: 4
解释:
^
|
| o
| o o
| o
| o o
±------------------>
0 1 2 3 4 5 6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-points-on-a-line
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
参考程序1:
class Solution:
def maxPoints(self, points: List[List[int]]) -> int:
def gongyue(x,y):
if x<y:
x, y= y,x
r=x%y
while r!=0:
x=y
y=r
r=x%y
return y
lp = len(points)
if lp < 3:
return lp
result = 2
for p1 in range(lp-1):
d = {'chuizhi':0,'pingxing':0}
temp = 1
p1x, p1y = points[p1]
mostpoints = 0
for p2 in range(p1+1, lp):
p2x, p2y = points[p2]
if p1x == p2x and p1y == p2y:
temp += 1
elif p1x == p2x:
d['chuizhi'] += 1
mostpoints = max(mostpoints,d['chuizhi'])
elif p2y == p1y:
d['pingxing'] += 1
mostpoints = max(mostpoints,d['pingxing'])
else:
hy = (p2y-p1y)
hx = (p2x-p1x)
a = gongyue(abs(hy), abs(hx))
hy = hy//a
hx = hx//a
if hy <0:
hy = -hy
hx = -hx
d[(hy,hx)] = d.get((hy,hx), 0) + 1
mostpoints = max(mostpoints, d[(hy,hx)])
result = max(result, mostpoints + temp)
return result
运行结果1: