leetCode--max-points-on-a-line

题目描述

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

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


解题思路:主要是运用了三点共线原理。

      先确定两个点可以构成一条线段,运用三点共线原理来判断第三个点是否与确定的两个点共线。

 



  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) {
        if(points==null)return 0;
        if(points.length<3)return points.length;
        int n=points.length;
        int res=0;
        
        for(int i=1;i<n;i++){
            int count=0;
            int x=points[i].x;
            int y=points[i].y;
            int dx=points[i-1].x-x;
            int dy=points[i-1].y-y;
            if(dx==0&&dy==0){
                for(int j=0;j<n;j++){
                    if(points[j].x==x&&points[j].y==y){
                        count++;
                    }
                }
            }else{
                for(int j=0;j<n;j++){
                    if((points[j].x-x)*dy==(points[j].y-y)*dx){
                        count++;
                    }
                }
            }
            res=res>count?res:count;
        }
        return res;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值