LeetCode--max-points-on-a-line

来源:互联网 发布:64位sql安装提示错误 编辑:程序博客网 时间:2024/06/03 23:58

题目描述

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

/** * 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:    int maxPoints(vector<Point> &points) {        int size = points.size();        if(size == 0)            return 0;        else if(size == 1)            return 1;        int ret = 0;        for(int i = 0;i<size;i++){            int curmax = 1;            map<double,int>mp;            int vcnt = 0; //垂直点            int dup = 0; //重复点            for(int j = 0;j<size;j++){                if(j!=i){                    double x1 = points[i].x - points[j].x;                    double y1 = points[i].y - points[j].y;                    if(x1 == 0 && y1 == 0){   //重复                        dup++;                    }else if(x1 == 0){      //垂直                        if(vcnt == 0)                            vcnt = 2;                        else                            vcnt++;                        curmax = max(vcnt,curmax);                    }else{                        double k = y1/x1;          //斜率                        if(mp[k] == 0)                            mp[k] = 2;                        else                            mp[k]++;                        curmax = max(mp[k],curmax);                    }                                   }            }            ret = max(ret,curmax+dup);                   }        return ret;    }};
0 0