Max Points on a Line

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