LeetCode 149. 直线上最多的点数
思路:
对每一个点 ,假定其实中心点,然后枚举每一个点与它构成的直线上的点,同时统计一个与其重合的点,最后的答案就是 直线上的点加上与其重合的点的最大值。枚举直线的时候需要注意的是,垂直的线没有斜率,所以要统计一下 q[0] == p[0]
代码:
class Solution {
public:
int maxPoints(vector<vector<int>>& points) {
//枚举中心点
int res = 0;
for(auto p : points){
int SamepointSum =0;
int SamexpointsSum = 0;
unordered_map<long double,int> hash;
for(auto q : points){
if(p == q) SamepointSum++;
else if(p[0] == q[0]) SamexpointsSum ++;
else{
long double k = (long double)(q[1] - p[1]) / (q[0] - p[0]);
hash[k] ++;
}
}
int cnt = SamexpointsSum;
for(auto c : hash) cnt = max(cnt,c.second);
//答案是 直线上的点 与 与原点重合的点的和 的 最大值
res = max(res,cnt +SamepointSum);
}
return res;
}
};
评论区