Max Points on a Line

本文介绍了一种算法,用于找出二维平面上最多有多少个点位于同一直线上。通过遍历每两个不同的点并检查其它点是否在这条直线上,该算法的时间复杂度为O(n^3)。

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

Analysis:

  This approach cost time complexity O(n^3).  

  1. If points less than 2 or all points locate at the same position, just output the points number.

  2. Find two points with different coordinates and check how many points other than these two are in this line. 

  3. Traverse all the points.  Keep updating the max points number.

Code:

/**
 * Definition for a point.
 * struct Point {
 *     int x;
 *     int y;
 *     Point() : x(0), y(0) {}
 *     Point(int a, int b) : x(a), y(b) {}
 * };
 */
class Solution {
public:
    bool allSamePoints(vector<Point> &points){
        for(int i=1;i<points.size();i++)
            if(points[i].x==points[i-1].x && points[i].y==points[i-1].y) return true;
            else  return false;
    }
    bool sameLine(Point i, Point j, Point k){
        return ((i.y-j.y)*(i.x-k.x)-(i.y-k.y)*(i.x-j.x))==0;
    }
    int maxPoints(vector<Point> &points) {
        if(points.size()<=1||allSamePoints(points))
            return points.size();
        int maxPoints = 2;    
        for(int i=0;i<points.size();i++){
            for(int j=i+1;j<points.size();j++){
                if(points[i].x!=points[j].x||points[i].y!=points[j].y){
                    int n=2;
                    for(int k=0;k<points.size();k++){
                        if(k!=i&&k!=j&&sameLine(points[i],points[j],points[k]))
                            n++;
                    }
                    maxPoints=max(maxPoints,n);
                }
            }  
        }
        return maxPoints;
    }
};

 

转载于:https://www.cnblogs.com/winscoder/p/3473032.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值