186. 最多有多少个点在一条直线上
给出二维平面上的n个点,求最多有多少点在同一条直线上。
样例
样例 1:
输入:(1,2),(3,6),(0,0),(1,3).
输出:3
样例 2:
输入:(1,2),(2,3),(3,2).
输出:2
注意事项
x点和y点的坐标值在-1000~1000之间
int findMax(vector<string> &kVec)
{
set<string> kSet;
for (auto it : kVec)
{
kSet.insert(it);
}
int maxSum = 0;
for (auto it : kSet)
{
int count = 0;
for (int i = 0; i < kVec.size(); i++)
{
if (it == kVec[i])
{
count++;
}
}
if (count > maxSum)
{
maxSum = count;
}
}
return maxSum;
}
int maxPoints(vector<Point> &points)
{
if(points.empty())
return 0;
int sum = 0;
int same = 0;
for (int i = 0; i < points.size(); i++)
{
Point first = points[i];
vector<string> kVec;
kVec.clear();
same =1;
for (int j = i + 1; j < points.size(); j++)
{
Point second = points[j];
if (second.x - first.x == 0)
{
if (second.y == first.y)
{
same++;
}
else
{
kVec.push_back("9999");
}
}
else
{
double db = double(second.y - first.y) / double(second.x - first.x);
std::string format = "%0.20f";
char text[32] = { 0 };
sprintf(text, format.c_str(), db);
kVec.push_back(text);
}
}
int tmpMax = findMax(kVec) +same;
if (tmpMax > sum)
{
sum = tmpMax;
}
}
return sum ;
}