思路是O(n^2)的,就是取一个点,和其他所有的点比,如果斜率一样的就在一条线上。这里要注意有重复的点,另外,学会了float也可以做map的key,还有map[k]++也覆盖了一开始count为0的情况。
参考:http://blog.csdn.net/doc_sgl/article/details/17103427
#include <unordered_map>
using namespace std;
class Solution {
public:
int maxPoints(vector<Point> &points) {
int ans = 0;
int size = points.size();
if (size == 0) return 0;
for (int i = 0; i < size; i++) {
int duplicate = 1;
unordered_map<float, int> mp;
for (int j = 0; j < size; j++) {
if (i == j) continue;
if (points[i].x == points[j].x
&& points[i].y == points[j].y) {
duplicate++;
continue;
}
float k = 0;
if (points[i].x == points[j].x) k = INT_MAX;
else {
k = (float) (points[i].y - points[j].y) / (points[i].x - points[j].x);
}
mp[k]++;
}
for (unordered_map<float, int>::iterator it = mp.begin(); it != mp.end(); it++) {
if (it->second + duplicate > ans)
ans = it->second + duplicate;
}
if (mp.size() == 0 && duplicate > ans)
ans = duplicate;
}
return ans;
}
};