斜率哈希+欧几里得:平面点集共线检测算法
创作时间:
2025-01-22 04:11:14
作者:
@小白创作中心
斜率哈希+欧几里得:平面点集共线检测算法
同一直线上的点集相关问题,使用哈希表遍历的方法,外层循环选定一个点,从头到尾去遍历其余的点,查看有多少的点与给定点的直线斜率相同(我们知道,一个点和一个斜率可以确定一条直线),那么只需要在哈希表记录下内层循环遍历下同一斜率的点,最后加上定点就得到当前组合下的最大点数。
斜率一共对应五种情况:
横纵坐标差值为0是特殊情况处理,直接给特定斜率
- 横坐标差值为0 (字符串“ 1/ 0” 表示)
- 纵坐标差值为0 (字符串“ 0 / 1 “表示)
- 横纵差值都为正 (斜率为正)
- 横纵差值都为负 (斜率为正)
- 横纵差值有一个为负一个为正 (斜率为负,并且-1 /2 和 1 / -2 都要统一为-1 /2 )
最终把斜率转换为字符串存储,先使用欧几里得算法来缩放差值diff_x和diff_y,得到一个最简斜率(需要为负数斜率加”-“)作为哈希表的key
class Solution {
public:
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int maxPoints(vector<vector<int>>& points) {
if (points.size() == 1) {
return 1;
}
int res = INT_MIN;
for (int i = 0; i < points.size(); i++) {
unordered_map<string, int> lineMap;
int resV = INT_MIN;
for (int j = i + 1; j < points.size(); j++) {
int diff_x = points[i][0] - points[j][0];
int diff_y = points[i][1] - points[j][1];
int g = gcd(abs(diff_x), abs(diff_y));
int shrink_x = 0;
int shrink_y = 0;
if(diff_x == 0){
shrink_x = 1;
shrink_y = 0;
}else if(diff_y == 0){
shrink_x = 0;
shrink_y = 1;
}else{
shrink_x = diff_x / g;
shrink_y = diff_y /g;
}
string lineRate = "";
lineRate += to_string(abs(shrink_x));
lineRate.push_back('_');
lineRate += to_string(abs(shrink_y));
if(shrink_x < 0 && shrink_y > 0|| shrink_x > 0 && shrink_y < 0){
lineRate = "-"+lineRate;
}
lineMap[lineRate]++;
resV = max(lineMap[lineRate], resV);
}
res = max(res, resV + 1);
}
return res;
}
};
欧几里得算法:(递归写法,当一个参数为0时,自动返回另一个非零参数)
int gcd(int a,int b){
return b == 0 ? a : gcd(b,a%b);
}
热门推荐
甘泉大峡谷:黄土高原上的“活丹霞”奇观
2024国庆旅游预测:出行人次将创新高,西安跻身十大热门城市
龙虾烹饪大赛:谁是厨艺王者?
波士顿大龙虾完美烹饪指南
大龙虾挑选攻略:3买3不买,教你挑到最新鲜的龙虾!
最新研究:大脑存储量仅4GB,串行处理机制是根本原因
科技时代的人类进化:自然选择与机械改造之争
金融科技如何重塑信贷业务?
存量房贷利率调整,百万房贷月供减少170元
竹子的N种打开方式:古诗词里的竹意象
狗狗禁食黑名单:葡萄、洋葱、大蒜和巧克力
皮下肿块怎么办?观察护理与治疗方案全解析
脂肪瘤不是癌!医生详解这种常见良性肿瘤
皮肤肿物科普:常见类型、识别要点与处理建议
木耳炒山药
2024,菏泽人的"高光时刻"
节奏盒子模组整合包:一款独特的音乐创作游戏
西安5处人少景美的打卡地,避开拥挤尽享悠闲
云丘山:世界三大冰洞奇观之一,融合道教文化与千年古村
临汾云丘山:冰洞群与古村交织的神秘景区
荣格&冯·法兰兹:童话故事中的心理密码
电脑图标变大?这些实用技巧帮你轻松调整!
PNG图标压缩:高效图标管理神器
SQL多表查询实战:连接类型与子查询应用
详解SQL多表查询:连接类型与子查询实战
李清照:以“词别是一家”开创女性文学先河
经常失眠、早醒……该拿什么拯救老年人的睡眠?
节奏盒子全角色介绍
人工智能应用对员工心理的双刃剑影响
《东京爱情故事》教你日语问候语