给你一个数组 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; } };
?