149. 直线上最多的点数
https://leetcode-cn.com/problems/max-points-on-a-line/
题目描述
示例 1:
输入:points = [[1,1],[2,2],[3,3]] 输出:3 示例 2:
输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] 输出:4
提示:
1 <= points.length <= 300 points[i].length == 2 -104 <= xi, yi <= 104 points 中的所有点 互不相同
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/max-points-on-a-line 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法 2: 哈希表
思路
枚举直线无法避免,但是计算直线上的点这一步可以优化,思路如下:
先确定一个点,计算当前点与剩余其他点的斜率
用哈希表记录这个过程中所有出现过的斜率以及出现次数
因为斜率一样的点就在同一条直线上,所以统计斜率出现次数就能知道该直线上有多少个点了
难点在于斜率的记录方式,直接计算会出现精度问题,所以采取分子分母元祖的记录方式,如,
slope = y / x记录为字符串'y/x',记录前还需要对分式进行约分。
复杂度分析
时间复杂度:$O(N^2*logm)$,枚举直线的时间是 $O(N^2)$,计算 gcd 的时间是 $O(logm)$,m 是点的最大差值。
空间复杂度:$O(N)$。
代码
JavaScript Code
Last updated
Was this helpful?