149. 直线上最多的点数
149. 直线上最多的点数
给你一个数组 points
,其中 points[i] = [xi, yi]
表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。
示例 1:
输入:points = [[1,1],[2,2],[3,3]]
输出:3
示例 2:
输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出:4
提示:
1 <= points.length <= 300
points[i].length == 2
-104 <= xi, yi <= 104
points
中的所有点 互不相同
思路:
利用哈希表去存储直线即可,注意对于斜率要正确的去表示.
不过像这样除法计算应该是不准确的,但是却可以通过。
最好记录把y/x化简成最简形式,存储下来,如果计算除法会出现偏差问题
class Solution {
public:
int maxPoints(vector<vector<int>>& points) {
int len = points.size();
// 点的数量不够
if(len < 3) {
return len;
}
int maxNum = 2;
// 遍历每两个点
for(int i = 0; i < len; i ++) {
unordered_map<double, int> count;//y=kx+b 哈希表存储斜率
for(int j = 0; j < len; j ++) {//求每两个点之间的直线
if(i != j) {
long long dx = points[i][0] - points[j][0];
long long dy = points[i][1] - points[j][1];
double gradient = dy * 1.0 / dx;
if(count.count(gradient)) {//如果哈希表中存在那么就技术
count[gradient] ++;
} else {
count[gradient] = 2;
}
maxNum = max(maxNum, count[gradient]);//更新最大值
}
}
}
return maxNum;
}
};
本文来自博客园,作者:{BailanZ},转载请注明原文链接:https://www.cnblogs.com/BailanZ/p/16347000.html