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
?

提示:

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;
  }
};

?

149. 直线上最多的点数

上一篇:MyBatis-Plus 字段自动注入


下一篇:mybatis配置文件