LeedCode_直线上最多的点数
题目说明
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
输入: [[1,1],[2,2],[3,3]]
输出: 3
解释:
^
|
| o
| o
| o
±------------>
0 1 2 3 4
链接:https://leetcode-cn.com/problems/max-points-on-a-line
分析:采用斜率暴力算法直接求解,注意不同的斜率数量是n*(n-1)/2,及时的剪枝(当某次的maxcount超过总数量的一半,及时的返回),maxcount==0表示所有点均是相同的
int maxPoints(vector<vector<int>>& points)
{
int n = points.size();
if (n < 3)
return n;
long long x;
long long y;
int maxcount = 0;
int same = 0;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
int count = 0;
if (points[i][0] == points[j][0] && points[i][1] == points[j][1])
{
continue;
}
else
{
x = points[i][0] - points[j][0];
y = points[i][1] - points[j][1];
for (int k = 0; k < n; k++)
{
if (k == i || k == j)
{
count++;
continue;
}
if ((points[k][0] == points[i][0] && points[k][1] == points[i][1]) || (points[k][0] == points[j][0] && points[k][1] == points[j][1]))
{
count++;
}
else
{
if ((long long)(y * (points[k][0] - points[i][0])) == (long long)(x * (points[k][1] - points[i][1])))
{
count++;
}
}
}
}
maxcount = max(count, maxcount);
}
if (maxcount > (n / 2))
{
return maxcount;
}
}
if (maxcount == 0)
return n;
return maxcount;
}