MaxPointsOnALine

1.问题描述:

给定2D空间的一个顶点集,判断在同一条直线上的最多点数

2.解题思路:

1)判断若顶点集的大小<=2,则直接返回顶点集大小

2)否则利用穷举法,产生任意两点构成直线的情况

3)统计上述产生的每条直线,最多共有多少个顶点

3.1)若构成直线的两点重合,则相同点计数器+1

3.2)寻找构成直线的第二个顶点后面同在一条直线上的点 (斜率判断,乘法表示)

3.3)相同点个数+同在一条直线上的个数就等于此直线上的最多点数,然后与全局最大值比较,更新最大值

3.解题源码

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;
     }
}


    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值