二维平面上最多有多少个点在同一条直线上
2014-04-23 15:32
543 查看
思路一:两点确立一条直线,判断其余的点是否在直线上;时间复杂度o(n^3)
思路二:记下任意两点的斜率(不要是整形,float或double ),找出最多能有多少个点斜率相同,
注意处理一些特殊情况,如斜率为正无穷,或存在相同的点对
accept代码:
Submission Result: Time Limit Exceeded
int maxPoints(vector<Point> &points) { vector<Point> vi=points; int xi,yi; int xj,yj; unsigned int i,j,k; int num=0; int max=0; int temp1,temp2,temp3,temp4,temp5; if(vi.size()==0) return 0; else if(vi.size()>0&&vi.size()<=1) return 1; else if(vi.size()==2) return 2; for(i=0;i<vi.size();i++) { num=1; xi=vi[i].x; yi=vi[i].y; for(j=i;j<vi.size();j++,num=2) { if(j==i) continue; xj=vi[j].x; yj=vi[j].y; num=2; temp1=xj-xi; temp2=yj-yi; for(k=0;k<vi.size();k++) { if(k==i) continue; if(k==j) continue; //if(((yj-yi)*(vi[k].x-xi)/(xj-xi)+yi)==vi[k].y) //temp1=(yj-yi)*(vi[k].x-xi); if(temp1==0&&temp2==0) { if(xj==vi[k].x) {num++; continue;} } else{ temp3=temp2*vi[k].x+vi[i].y*vi[j].x-vi[j].y*vi[i].x; temp4=temp1*vi[k].y; if(temp3==temp4) num++; } } if(num>max) max=num; } } return max; }
思路二:记下任意两点的斜率(不要是整形,float或double ),找出最多能有多少个点斜率相同,
注意处理一些特殊情况,如斜率为正无穷,或存在相同的点对
accept代码:
int maxPoints(vector<Point> &points) { int mx =1e10; size_t i,j; int xx,yy; int sam=0; int max_num=0; map<double,int> m; //m.clear(); if(points.size()==0) return 0; else if(points.size()==1) return 1; else if(points.size()==2) return 2; for(i=0;i<points.size();i++)//如果vector中有三个以上的点 { m.clear(); sam=0;//用于记录有多少一样的点 for(j=i;j<points.size();j++) { double k; xx=points[j].x-points[i].x; yy=points[j].y-points[i].y; if(xx==0&&yy==0)//两个点相同 { sam++; continue; } else if(xx==0)//两点确立的直线平行于y轴,它的斜率为正无穷,用mx表示 k=mx; else k=double(yy)/xx;//一般情况计算两点的斜率,注意区分k=double(yy/xx) m[k]++; } if(m.size()==0) { if(sam>max_num) max_num=sam; continue; } map<double,int>::iterator it=m.begin();//遍历m for(it;it!=m.end();it++) { if((*it).second+sam>max_num) max_num=(*it).second+sam; } } return max_num; }
相关文章推荐
- 每天一道LeetCode-----平面上n个点,计算最多有多少个点在一条直线上
- 分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
- LeetCode | 149. Max Points on a Line求多个点里面在一条直线上的点最多有多少个难题
- POJ 1118+2606+2780 (求平面上同一条直线的最多点数)
- n条直线最多能划分出多少个平面?
- 网易互娱笔试题----最多有多少点在一条直线上
- lintcode最多有多少个点在一条直线上
- 平面上画n条直线,最多能将平面分成多少部分?
- [LintCode] 最多有多少个点在一条直线上
- [leetcode] Max Points on a Line 判断最多有多少个点在同一条直线上
- n条直线最多能将一个平面分成多少部分?
- 解题报告:最多有多少个点在一条直线上
- LinkCode-最多有多少个点在一条直线上
- LintCode:最多有多少个点在一条直线上
- 最多有多少个点在同一条直线上
- 分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
- 【LintCode】最多有多少个点在一条直线上
- 最多有多少个点在一条直线上
- lintcode 中等题:Max Points on a Line 最多有多少个点在一条直线上
- 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分