首页 > 代码库 > [LeetCode] Max Points on a Line
[LeetCode] Max Points on a Line
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
1 #include <iostream> 2 #include <algorithm> 3 #include <unordered_map> 4 #include <vector> 5 #include <limits> 6 7 using namespace std; 8 9 /**10 * Definition for a point.11 * struct Point {12 * int x;13 * int y;14 * Point() : x(0), y(0) {}15 * Point(int a, int b) : x(a), y(b) {}16 * };17 */18 19 bool typeisless(const Point &data1,const Point &data2){20 return data1.x < data2.x;21 }22 23 class Solution {24 public:25 26 int maxPoints(vector<Point> &points) {27 if(points.size()==0) return 0;28 29 int last_x = (points.begin()->x) - 1;30 int maxnum = INT_MIN,curnum = 0;31 std::sort(points.begin(),points.end(),typeisless);32 for(vector<Point>::iterator iter = points.begin();33 iter != points.end();++iter){34 if(iter->x == last_x){35 ++curnum;36 }else{37 last_x = iter->x;38 curnum = 1;39 }40 41 maxnum = maxnum<curnum?curnum:maxnum;42 }43 44 unordered_map<double,int> count_map;45 count_map.insert(pair<double,int>(0.0,0));46 47 for(vector<Point>::iterator iter1 = points.begin();48 iter1 != points.end();++iter1){49 count_map.clear();50 int samepointnum = 0;51 52 for(vector<Point>::iterator iter2 = iter1 + 1;53 iter2 != points.end();++iter2){54 55 if(iter2->x == iter1->x && iter2->y == iter1->y){56 ++samepointnum;continue;57 }else if(iter2->x == iter1->x)58 continue;59 else{60 double dslope = (static_cast<double>(iter2->y - iter1->y))/61 (static_cast<double>(iter2->x - iter1->x));62 if(count_map.find(dslope) != count_map.end()) ++count_map[dslope];63 else{64 count_map[dslope] = 1;65 ++count_map[dslope];66 }67 }68 }69 70 for(unordered_map<double,int>::iterator iter=count_map.begin();71 iter!=count_map.end();++iter){72 if(iter->second + samepointnum > maxnum){73 maxnum = iter->second + samepointnum;74 }75 }76 }77 78 return maxnum;79 }80 };
[LeetCode] Max Points on a Line
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。