牛客网刷题之穷举

刷题记
第一次写博客,记录日常生活的刷题,以后能够复习使用。
题目说明:

对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上。

分析:

1.题目给的是二维空间的点,点包含有横坐标和纵坐标信息;
2.根据两点的斜率公式k=(y1-y2)/(x1-x2)得到;
3.当点A与点B是同一点时,给相同点+1;
4.当两点不同点时,进行下一个点与第一个点的斜率比较,若三个点的斜率相同时,三个点共线;

代码:

public class Solution {
    public int maxPoints(Point[] points) {
        if(points.length<0&&points==null){
            return 0;
        }
        //当只有一个点或两个点时返回的是点的个数
        if(points.length<3){
            return points.length;
        }
        int max=0;//总的点数
        int samepoint;//相同的点数
        int samekp;//相同斜率的点数
        for(int i=0;i<points.length;i++){
            samekp=0;
            for(int j=i+1;j<points.length;j++){
                samepoint=1;
                int xdis=points[j].x-points[i].x;
                int ydis=points[j].y-points[i].y;
                if(xdis==0&&ydis==0){ //表示两个点是同一个位置
                    samekp++;
                }else{
                    samepoint=2;
                    for(int k=j+1;k<points.length;k++){
                        int xkdis=points[k].x-points[i].x;
                        int ykdis=points[k].y-points[i].y;
                        if(ydis*xkdis==ykdis*xdis){//计算两个斜率是否相同,乘法避免了除数为0的情况
                            samepoint++;
                        }
                    }
                }
                if(max<samepoint+samekp){
                    max=samepoint+samekp;
                }
            }
        }
        return max;
    }
}

你可能感兴趣的:(复习时使用)