您的位置:首页 > 其它

LeetCode : Max Points on a Line

2014-05-21 17:42 344 查看
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

int maxPoints(vector<Point> &points) {
int length=points.size();
int maxpoints=0;
if(length<1) return 0;
if(length==1) return 1;
double *Slope=new double[length-1];
multimap<double ,double> mp;
multimap<double ,double> mpTemp;
for (int j = 0; j < length; j++)
{
Point p=points[j];
double x0=p.x,y0=p.y;
double x1=0,y1=0;
double k=0;//斜率
int equalNum=0;
multimap<double,double >::iterator iter;
multimap<double,double >::iterator iterTemp;
multimap<double,double >::iterator iter1;
for (int i = 0; i < length; i++)
{

x1=points[i].x;
y1=points[i].y;
if((x1-x0)!=0)
{
k=(y1-y0)/(x1-x0);
}
else if((x1-x0)==0&&(y1-y0)!=0)
{
k=1.79769e+308;
}
else if((x1-x0)==0&&(y1-y0)==0)
{
equalNum++;
continue;
}
iter=mp.find(k);
if(iter==mp.end())
{
mp.insert(pair<double,double >(k,2));
}
else
{
iter->second+=1;
}
}
if(equalNum>1){

for(iter=mp.begin();iter!=mp.end();++iter){

iter->second+=1;
}
}
for (iterTemp=mp.begin(); iterTemp!=mp.end(); iterTemp++)
{
mpTemp.insert(pair<double,double>(iterTemp->second,iterTemp->first));
}
iter1=mpTemp.end();
if(mpTemp.size()>0)
{
iter1--;
if(iter1->first>maxpoints){
maxpoints=iter1->first;
}
}
else
{
maxpoints=equalNum;
}
mpTemp.clear();
mp.clear();
}
return maxpoints;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: