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; }
  * }
  */
import java.util.*;
public class Solution {
     public int maxPoints(Point[] points) {
         int len=points.length;
         if (points== null ){
             return 0 ;
         }
         if (len<= 2 ){
             return len;
         }
         int max= 2 ;
         for ( int i= 0 ;i<len;i++){
             int num1= 0 ;
             int num2= 1 ;
             for ( int j=i+ 1 ;j<len;j++){
                 int x1=points[i].x-points[j].x;
                 int y1=points[i].y-points[j].y;
                 if (x1== 0 &&y1== 0 ){
                     num1++;
                 } else {
                     num2++;
                     for ( int k=j+ 1 ;k<len;k++){
                         int x2=points[j].x-points[k].x;
                         int y2=points[j].y-points[k].y;
                         if (x2*y1==x1*y2){
                             num2++;
                         }
                     }
                 }
                 if (max<(num1+num2)){
             max=num1+num2;
             }
                 num2= 1 ;
             }
         }
         
             return max;
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值