您的位置:首页 > 理论基础 > 计算机网络

https://leetcode.com/problems/max-points-on-a-line/

2015-05-03 16:24 344 查看
https://leetcode.com/problems/max-points-on-a-line/

最开始的方法是两个点 然后计算出直线的系数 然后看哪些点在直线上 ax+b=y 

发现会超时 

后来 如果确定1点 那么只要剩余的点和1组成的斜率相同 它们和1点就在一条直线上 

斜率有两种 普通的 或者直线和x轴垂直 

为了把点1下所有斜率存在一个list方便统计 x轴垂直的斜率设为char'a'

写完之后发现 [ [ 1 , 1 ] , [ 1 , 1 ] , [ 1 , 2 ] ]这个case过不去 

因为[ 1 , 1 ]出现两次 1,2点会被认为是垂直线 1,3 会被认为是一般直线 实际都在一条直线上 

因此多加了一个变量dul 点1固定 之后的点有几个dul 算出来点数都要再加dul (即使所有点都重合也没问题)

固定点1 统计此次最多点数 再更换为固定点2 继续统计 

# Definition for a point.
# class Point:
# def __init__(self, a=0, b=0):
# self.x = a
# self.y = b

class Solution:
# @param {Point[]} points
# @return {integer}
def maxPoints(self, points):
start=Point()
end=Point()
length=len(points)
sol=0
#matrix= [([0] * length) for i in range(length)]
if length==0:
return 0
elif length==1:
return 1
elif length==2:
return 2
else:
for i in range(length-1):#(0-7)#
slope=[]
dul=0
temp=0
for j in range(i+1,length):#(i+1-8)
start=points[i]
end=points[j]
x1=start.x
y1=start.y
x2=end.x
y2=end.y
if x1==x2 and y1==y2:
dul=dul+1
elif x2==x1 and y1!=y2:
m='a'
slope.append(m)
else:
m=(y2-y1*1.0)/(x2-x1)
slope.append(m)

if slope==[]:
temp=0
if temp+dul>sol:
sol=temp+dul
else:
for k in slope:
temp=slope.count(k)
if temp+dul>sol:
sol=temp+dul
return sol+1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: