题目描述
对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
思路:
- 穷举从各个点出发能连成的最多点的直线,返回最多的一个。
- 利用map存储斜率相同的点的个数,其中斜率k作为map的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) {
int len = points.size();
if (len <= 2)
return len;
int res = 0;
for (int i=0; i<len-1; i++)
{
int curmax = 0;
int dup = 1; // 重复的点的个数
int ver = 0; // 垂直的点的个数
map<double, int> mp; // 存储斜率k的map,其中斜率k作为key值
for (int j=i+1; j<len; j++)
{
double cx = (double)points[j].x - (double)points[i].x;
double cy = (double)points[j].y - (double)points[i].y;
if (cx == 0 && cy == 0)
dup++;
else if (cx == 0)
{
ver++;
curmax = max(curmax, ver);
}
else
{
double k = cy / cx;
mp[k]++;
curmax = max(curmax, mp[k]);
}
}
res = max(res, curmax+dup);
}
return res;
}
};