面试题 16.14. **直线

判断共线,可以根据两个点列出相应的方程式,把接下来的点代入判断。
也可以根据不同的两个点组成的向量是否共线判断,向量的很多知识都忘记了,大致共线的判断条件是
向量a=λ向量b,(a1,a2)=λ(b1,b2) a1=λb1 a2=λb2 所以a1/b1=a2/b2=λ 可以得到a1b2==a2b1

所以我们根据这个条件判断不同的两个点组成的向量是否共线 如果共线就在同一条直线上,我们就可以更新点的数目.

class Solution {
    public int[] bestLine(int[][] points) {
     int length= points.length;
     int num=0;
     int maxnum=0;
     int[] res=new int[2];
     for(int i=0;i<length-1;i++)
     {
         for(int j=i+1;j<length;j++)
         {
             if(length-1-j+1+1<=maxnum) {
                 break;
             }
             num=2;
             int a1=points[j][0]-points[i][0];
             int a2=points[j][1]-points[i][1];

             for(int k=j+1;k<length;k++)
             {
                 int b1=points[k][0]-points[i][0];
                 int b2=points[k][1]-points[i][1];
                 
                 if(a1*b2==a2*b1) {
                     num++;
                 }
             }
             if(num>maxnum)
             {
                 maxnum=num;
                 res[0]=i;
                 res[1]=j;
             }
         }
     }
     return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值