max-points-on-a-line java code

来源:互联网 发布:下沙淘宝代运营骗局 编辑:程序博客网 时间:2024/05/16 18:43

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

/** * 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 num=0;            int temp=1;            for(int j=i+1;j<points.length;j++){                ABx=points[i].x-points[j].x;                ABy=points[i].y-points[j].y;                if(ABx==0 && ABy==0)//表示出现重复点                {                    num++;                }else{                    temp++;                    for(int k=j+1;k<points.length;k++){                        BCx=points[j].x-points[k].x;                        BCy=points[j].y-points[k].y;                        if(ABx*BCy==BCx*ABy){//表示两个斜率相等,转化为乘积的形式可以避免分母为0的情况                            temp++;                        }                    }                }                if(max<(num+temp)){                  max=num+temp;                }                temp=1;            }        }        return max;    }}
原创粉丝点击