149. 直线上最多的点数(暴力+两点式斜率共线)

难度困难

给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。

 

示例 1:

输入:points = [[1,1],[2,2],[3,3]]
输出:3

示例 2:

输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出:4

 

class Solution:
    def maxPoints(self, points: List[List[int]]) -> int:
        n = len(points)
        cnt = 0
        res = 1
        for i in range(n):
            pa = points[i]
            for j in range(i+1,n):
                pb = points[j]
                cnt = 2
                for k in range(j+1,n):
                    pc = points[k]
                    # 直线线的两点式方程(y-y1)/(x-x1)=(y-y2)/(x-x2),再对角相乘就可以了
                    s1 = (pc[1]-pa[1]) * (pc[0]-pb[0])
                    s2 = (pc[0]-pa[0]) * (pc[1]-pb[1])
                    if s1==s2:
                        cnt+=1
                res = max(res,cnt)
        return res     

 

 
posted @ 2023-07-01 20:36  乐乐章  阅读(16)  评论(0编辑  收藏  举报