给你一个数组 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 中的所有点 互不相同
var maxPoints = function (points) {
let max = 1;
// 点两两组合,枚举所有组合
for (let i = 0; i < points.length; i++) {
for (let j = i + 1; j < points.length; j++) {
// points[i] 和 points[j] 确定了一条直线
// 计算在这条直线上的点
const count = countPointsOnLine(points[i], points[j]);
max = Math.max(max, count);
}
}
return max;
// *********************************************
function countPointsOnLine([x1, y1], [x2, y2]) {
const slopeOfLine = (y1 - y2) / (x1 - x2);
let count = 2;
points.forEach(([x, y]) => {
if (x === x1 && y === y1) return;
if (x === x2 && y === y2) return;
// 斜率一样则说明点在线上
const slope = (y1 - y) / (x1 - x);
if (slope === slopeOfLine) count++;
});
return count;
}
};
?
原文:https://blog.51cto.com/u_15283585/2948200