首页 > 代码库 > LeetCode: Max Points on a Line [149]
LeetCode: Max Points on a Line [149]
【题目】
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.【题意】
给定一堆点,要求找出一条之前上的最大点数【思路】
没什么好的方法,从每个点P出发,遍历所有的情况从每个点P出发,斜率相同的点即为统一之前上的点
注意两种特殊情况:
1. 两个点重合(即为同一个点)
2. 两个点的很坐标相同,即两天构成的之前垂直于X轴
【代码】
/** * Definition for a point. * struct Point { * int x; * int y; * Point() : x(0), y(0) {} * Point(int a, int b) : x(a), y(b) {} * }; */ class Solution { public: int maxPoints(vector<Point> &points) { int max=0; double INFTY = INT_MAX * 1.0; for(int i=0; i<points.size(); i++){ map<double, int> pointNum; //key是直线的斜率,value是这条直线上的点数 int samepoints = 1; //统计和当前点重合点的个数(包括它自己,所以初始化为1) int curmax=0; //过当前这个点的所有直线的最多点数 for(int j=0; j<points.size(); j++){ if(i!=j){ //计算斜率 if(points[i].x==points[j].x && points[i].y==points[j].y){ samepoints++; continue; } //x坐标相同 if(points[i].x==points[j].x){ pointNum[INFTY]++; if(pointNum[INFTY]>curmax)curmax = pointNum[INFTY]; continue; } //x坐标不同 double slop = (points[i].y-points[j].y) * 1.0/(points[i].x-points[j].x); pointNum[slop]++; if(pointNum[slop] > curmax) curmax = pointNum[slop]; } } if(curmax+samepoints > max) max = curmax+samepoints; } return max; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。