码迷,mamicode.com
首页 > 其他好文 > 详细

Max Points on a Line(6)

时间:2014-11-07 20:32:32      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   for   div   on   log   

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

如何判断点在同一条直线上呢?可以这么办。设定一个初始起点,计算剩余点到起始点直线的斜率,如果存在斜率相同的情况,则说明这几个点在同一条直线上。但是,还要考虑斜率不存在和重复点的情况。所以单独记录重复点的个数和斜率为正无穷的情况。最后取最大值应该是怎么个取法呢?应该是取 斜率相同的点数+重复点数  和垂直线的条数+重复的点数 的最大值,这个多想一会应该能明白。为了快速得出斜率值相同的直线条数,在本例中用到了map,只要给定斜率值,就能快速找到对应的关联值,方便快捷,不用自己再去写一层循环了。

说来都有一点惭愧,搞了很长时间终于完成,事后发现原因居然是因为if判断条件中误将==写成了=,真是有点伤怀啊!本来很快就能ac了!

现贴出代码!

 1 class Solution {
 2 public:
 3     int maxPoints(vector<Point> &points) {
 4         if(points.size()<=2)
 5             return points.size();
 6             int i,j;
 7             int coin;
 8             int h;
 9             int maxsize=-1;
10             double k;
11             for(i=0;i<points.size()-1;i++){
12                 map<double, int > point;
13                 map<double ,int >::iterator it;
14                 h=0;
15                 coin=1;//自己本身也算重复了 因为凡是组成直线,点数都是从2起步!
16                 for(j=i+1;j<points.size();j++){
17                     if(points[j].x==points[i].x&&points[j].y==points[i].y){
18                         coin++;
19                         continue;
20                     }
21                     else if(points[j].x==points[i].x){//就是这里刚开始把==弄成了=!
22                         h++;
23                         continue;
24                     }
25                     else if(points[j].y==points[i].y){
26                         k=0.0;
27                     }
28                     else{
29                         k=(double)points[j].y-points[i].y;
30                         k/=(double)(points[j].x-points[i].x);
31                     }
32                     it=point.find(k);
33                     if(it==point.end()){
34                         point.insert(map<double ,int>::value_type(k,1));
35                     }
36                     else{
37                         point[k]++;
38                     }
39 
40                 }
41                 h+=coin;//h必须大于coin
42                 for(it=point.begin();it!=point.end();it++){
43                     int temp=it->second+coin;
44                     if(temp>maxsize)
45                         maxsize=temp;
46                 
47                 }
48                 if(h>maxsize)
49                     maxsize=h;
50 
51             }
52 
53             return maxsize;
54     
55 
56     }
57 };

 

Max Points on a Line(6)

标签:style   blog   io   color   sp   for   div   on   log   

原文地址:http://www.cnblogs.com/zhoudayang/p/4082016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!