LeetCode – Max Points on a Line (Java)
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
Analysis
This problem can be solve by counting points that have the same slope for each point. When counting, we need to be careful about the duplicate points and points on the vertical lines.
Java Solution
public int maxPoints(Point[] points) { if(points == null  points.length == 0) return 0; HashMap<Double, Integer> result = new HashMap<Double, Integer>(); int max=0; for(int i=0; i<points.length; i++){ int duplicate = 1;// int vertical = 0; for(int j=i+1; j<points.length; j++){ //handle duplicates and vertical if(points[i].x == points[j].x){ if(points[i].y == points[j].y){ duplicate++; }else{ vertical++; } }else{ double slope = points[j].y == points[i].y ? 0.0 : (1.0 * (points[j].y  points[i].y)) / (points[j].x  points[i].x); if(result.get(slope) != null){ result.put(slope, result.get(slope) + 1); }else{ result.put(slope, 1); } } } for(Integer count: result.values()){ if(count+duplicate > max){ max = count+duplicate; } } max = Math.max(vertical + duplicate, max); result.clear(); } return max; } 
The relation between normal cases, vertical cases and duplicate cases can be shown as follows:
<pre><code> String foo = "bar"; </code></pre>

William Kuo

בן

R. Wang

Andre

Mukul Jain

Aditya

Robert Wagner

AR

Vishlesh Patel

SS

SS

Arnaud Hebert