题目:
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
思路:
下面的代码是原来写的,原来都通过了,但是现在运行不过去了。请读者朋友们帮我找找bug。。。
这里的思路挺简单:对于每个点,建立一个以它和其它点构成的斜率为key的哈希表,存贮处于该斜率上的点的数量,最后找出处于同一斜率上的点的最大值。当然对于相同点以及斜率为无穷大的点要做特殊处理。
代码:
/**
* 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) {
unordered_map<float, int> hash;
int global_max = 0;
for(int i = 0; i < points.size(); ++i) {
hash.clear();
int trivial = 0, same = 1, vertical = 0;
for(int j = i + 1; j < points.size(); ++j) {
int x1 = points[i].x, y1 = points[i].y;
int x2 = points[j].x, y2 = points[j].y;
if(x1 == x2 && y1 == y2) {
same++;
}
else if(x1 == x2) {
vertical++;
}
else {
trivial = max(trivial, ++hash[(float)(y1 - y2)/(x1 - x2)]);
}
}
global_max = max(global_max, max(vertical, trivial) + same);
}
return global_max;
}
};