思路:
-
//关键在于判断三点共线,两平行直线有且只有一个交点,所以有一个中间点,这个中间点与另外两个端点的连线的斜率相等
-
//由比率的性质
代码:
/**
* Definition for a point.
* class Point {
* int x;
* int y;
* Point() { x = 0; y = 0; }
* Point(int a, int b) { x = a; y = b; }
* }
*/
public class Solution {
public int maxPoints(Point[] points) {
int ABx;
int ABy;
int BCx;
int BCy;
if (points.length<=2)return points.length;
int max=2;
for (int i = 0; i <points.length ; i++) {
int same=0;
int temp=1;
for (int j = i+1; j < points.length; j++) {
ABx=points[j].x-points[i].x;
ABy=points[j].y-points[i].y;
if (ABx==0&&ABy==0)same++;
else {
temp++;
for (int k = j+1; k < points.length; k++) {
BCx=points[k].x -points[j].x;
BCy=points[k].y-points[j].y;
if (ABx*BCy==ABy*BCx){
temp++;
}
}
}
if (max<(same+temp)){
max=same+temp;
}
temp=1;
}
}
return max;
}
}