Max Points on a Line
Total Accepted: 49916 Total Submissions: 365731 Difficulty: Hard
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
/** * Definition for a point. * struct Point { * int x; * int y; * Point() : x(0), y(0) {} * Point(int a, int b) : x(a), y(b) {} * }; */ /* 输入: 1.空 2.一个点、两个点 3.有多条斜率不存在的点怎么计算 4.有重复的点怎么计算 5.一条直线上有多个点 */ class Solution { public: int maxPoints(vector<Point>& points) { int points_size = points.size(); if(points_size<=2){ return points_size; } unordered_map<double,int> slopes; int vertical_slopes_points = 0; int max_points = INT_MIN; for(int i=0;i<points_size;i++){ int samePoints = 0; vertical_slopes_points = 0; slopes.clear(); for(int j=i;j<points_size;j++){ if(points[i].x==points[j].x && points[i].y==points[j].y){ samePoints ++; }else if(points[i].x==points[j].x){ vertical_slopes_points ++; }else{ double k = (points[i].y-points[j].y)*1.0/(points[i].x-points[j].x); slopes[k]++; } } if(samePoints == points_size){ return samePoints; } vertical_slopes_points += samePoints; for(auto iter:slopes){ max_points = max(iter.second+samePoints,max_points); } max_points = max(vertical_slopes_points,max_points); } return max_points; } };
写者:zengzy
出处: http://www.cnblogs.com/zengzy
标题有【转】字样的文章从别的地方转过来的,否则为个人学习笔记