Max Points on a Line

HardArrayHash TableMathGeometry

Solution

import { range } from '@algorithm/lib';
 
export function maxPoints(points: number[][]): number {
  const n = points.length;
 
  if (n === 1) {
    return 1;
  }
 
  let maxCount = 2;
  for (const i of range(n)) {
    const gradientCounts = new Map<number, number>();
    for (const j of range(n)) {
      if (i !== j) {
        const gradient = Math.atan2(points[j][1] - points[i][1], points[j][0] - points[i][0]);
        gradientCounts.set(gradient, (gradientCounts.get(gradient) || 0) + 1);
      }
    }
    const maxGradientCount = Math.max(...gradientCounts.values());
    maxCount = Math.max(maxCount, maxGradientCount + 1);
  }
  return maxCount;
}