出处:http://oj.leetcode.com/problems/max-points-on-a-line/
Python solution:
# 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):
if len(points)<2:
return len(points)
maxPoints = 0
for i in xrange(len(points)):
duplicate = 1
count = {}
vertical = {}
maxPointsForThisPoint = 0
for j in xrange(i+1, len(points)):
if(points[i].x == points[j].x):
if(points[i].y == points[j].y):
duplicate += 1;
else:
vertical[i] = vertical[i] + 1 if i in vertical else 1
else:
k = (points[i].y-points[j].y)/float(points[i].x - points[j].x)
count[k] = count[k] + 1 if k in count else 1
maxPointsForThisPoint = max(max(count.values()) if count else 0, max(vertical.values()) if vertical else 0) + duplicate
if maxPointsForThisPoint > maxPoints:
maxPoints = maxPointsForThisPoint
return maxPoints
大体思路是依次将每个点作为anchor, 计算通过改点包含最多点的直线。
对每个点都操作一下,它们中最大的值就是最大的值。