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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了