題目原型:
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;i map = new HashMap();
int maxSumtmp = 0;
for(int j = 0;jmap.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);
}