題目原型:
Given n points on a 2D plane, find the
maximum number of points that lie on the same straight line.
基本思路:
題目的意思就是找到一條直線,讓最多的點在這條直線上,那麼利用數學中的斜率定義,如果兩個點與另外一個的斜率相等,那麼這兩個點與另外一個點在同一條直線上。
下面用到求最大公約數,注意:一個正數和一個負數求最大公約數是沒意義的。
//通過斜率相等來求 public int maxPoints(Point[] points) { int maxSum = 0; if(points==null||points.length==0) return 0; //如果只有一個點時 if(points.length==1) return 1; //以一個點為基點,分別求出其余點與這個點之間斜率 for(int i = 0;imap = new HashMap (); int maxSumtmp = 0; for(int j = 0;j map.get(str)?maxSumtmp:map.get(str); } maxSum = Math.max(maxSumtmp+1+samePoint, maxSum); } return maxSum; } //最大公約數,如果最大公約數為0 ,說明這兩個數為均為0 public int gcd(int a , int b) { return a==0?b:gcd(b%a, a); }