求最多有多少个点在一条直线上
参考:http://fisherlei.blogspot.tw/2013/12/leetcode-max-points-on-line-solution.html
#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
using namespace std;
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;
map<double, int> slope;
int max_num = 0;
for(int i = 0; i < points.size(); i++) {
int duplicate = 1;
int max_slope = 1;
slope.clear();
for(int j = 0; j < points.size(); j++) {
if(i == j) continue;
if(points[i].x == points[j].x && points[i].y == points[j].y) {
duplicate++;
}
else {
if(points[i].x == points[j].x)
max_slope++;
else {
double k = (double)(points[j].y - points[i].y) / (points[j].x - points[i].x);
slope[k]++;
}
}
}
if(max_num < duplicate)
max_num = duplicate;
for(map<double, int>::iterator iter = slope.begin(); iter != slope.end(); iter++) {
if(iter->second + duplicate > max_num)
max_num = iter->second + duplicate;
}
if(max_slope > max_num)
max_num = max_slope;
}
return max_num;
}
};