点击打开链接
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.empty()) return 0;
int res = 1;
for(int i=0; i<points.size(); i++){
map<long double, int> Map;
int duplicates = 0, verticals = 1;
for(int j=i+1; j<points.size(); j++){
if(points[i].x == points[j].x){
verticals +=1;
if(points[i].y == points[j].y) duplicates += 1; //重合的点可以放在任何一个组里
}
}
for(int j=i+1; j<points.size(); j++){
if(points[i].x != points[j].x){
long double slope = (long double)(points[i].y - points[j].y) /(points[i].x - points[j].x);
if(Map[slope] == 0) Map[slope] = 2; //初始化
else Map[slope] +=1;
res = max(res, Map[slope]+duplicates);
}
}
res = max(res, verticals); //verticals单独处理
}
return res;
}
};