直线上最多的点数
07/03/2021
题目描述
给你一个数组 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
提示:
- 1 <= points.length <= 300
- points[i].length == 2
- -104 <= xi, yi <= 104
- points 中的所有点 互不相同
本人题解
/**
* @param {number[][]} points
* @return {number}
*/
var maxPoints = function(points) {
if (points.length <= 2) {
return points.length
}
let lines = Array.from({length: points.length}).map(_ => ({}));
let sumLines = []
while(points.length > 1) {
let currentP = points.pop()
let index = points.length
points.forEach((p, i) => {
let fixed = (currentP[0] - p[0]) / (currentP[1] - p[1])
if (isNaN(fixed)) {
fixed = 'nan'
}
let line = lines[index][fixed] || [index]
if (line.indexOf(i) == -1) {
line.push(i)
}
lines[index][fixed] = line
lines[i][fixed] = line
sumLines.push(line)
})
}
return sumLines.sort((a, b) => a.length - b.length).pop().length
};分析
忘了。以后再补