标签:
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; } };
标签:
原文地址:http://www.cnblogs.com/zengzy/p/5050634.html