给好多点你,然后求出最多的点处于同一条直线,就是暴力,然后用map记录
Ps 如果是垂直的话,k是INT_MAX,有可能有很多点是同一点, 不要重复判断
/**
* 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) {
if(points.size() == 0) return 0;
int size = points.size();
if(size < 3) return size;
int maxx = 0;
map<double, int>ma;
for(int i = 0; i < size; ++ i){
ma.clear();
int num = 1;
ma[INT_MIN] = 0;
for(int j = 0; j < size; ++ j){
if(i == j) continue;
if(points[i].x == points[j].x && points[i].y == points[j].y){
num++;
continue;
}
else{
double k = (points[i].x == points[j].x) ? INT_MAX : (double)(points[i].y - points[j].y) / (points[i].x - points[j].x);
ma[k]++;
}
}
auto iter = ma.begin();
for(; iter != ma.end(); ++ iter){
if(iter -> second + num > maxx)
maxx = iter -> second + num;
}
}
return maxx;
}
};