标签:
No.149 Max Point on a Line
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
法一:考虑不周,一条直线上的点会重复计数,但没找到解决方法【wrong】
Input: [[0,0],[-1,-1],[2,2]]
Output: 4
Expected: 3
1 /** 2 * Definition for a point. 3 * struct Point { 4 * int x; 5 * int y; 6 * Point() : x(0), y(0) {} 7 * Point(int a, int b) : x(a), y(b) {} 8 * }; 9 */ 10 class Solution 11 { 12 public: 13 int maxPoints(vector<Point>& points) 14 { 15 //输入:二维平面上的一组点 16 //输出:同一条直线上的点的最大数量 17 //思路:两层循环,依次找出每两个点组成的直线的斜率slope,O(n2)本以为很大,还好,相信自己 18 // 将得到的数据存到map中:key为斜率,value为该斜率的点的个数 19 int count = points.size() ; 20 if( count == 0) 21 return 0; 22 if( count == 1) 23 return 1; 24 if( count == 2) 25 return 2; 26 27 map<double, int> result; 28 double slope; 29 for(int i=0; i< count ; i++) 30 for(int j = i+1; j<count; j++) 31 { 32 if(points[i].x == points[j].x) 33 slope = numeric_limits<double>::max(); 34 else 35 slope = (points[i]. y - points[j]. y)/(points[i]. x - points[j]. x);//除法!!分母 36 if(result.find(slope) == result.end()) 37 result[slope] = 2; 38 else 39 result[slope]++; 40 } 41 42 int max = 0; 43 for(auto const i : result) 44 { 45 if(i.second > max) 46 max = i.second; 47 } 48 return max; 49 } 50 51 };
法二:【几次提交,总是有点小问题】
输入:二维平面上的一组点
输出:同一条直线上的点的最大数量
思路:两层循环,依次找出每两个点组成的直线的斜率slope,O(n2)本以为很大,还好,相信自己
将得到的数据存到map中:key为斜率,value为该斜率的点的索引的集合【可以去重】
标签:
原文地址:http://www.cnblogs.com/dreamrun/p/4529073.html