斜率哈希+欧几里得:平面点集共线检测算法
创作时间:
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);
}
热门推荐
给预付费“上锁” ,数字人民币智能应用守护消费者权益
东晋王朝的短暂统治者——司马丕
每 10 人中就有 1 人患有肾脏病!了解肾脏知识,早检查,保健康
2024年中国二次元产业发展历程剖析:从亚文化到主流
什么是润滑油等级?一文读懂润滑油的分类与选择要点
基础摄影知识:光圈、快门和ISO的关系
期货空单的定义是什么?期货空单的操作策略有哪些?
收到违章停车单告知单怎么处理
美国第六代战斗机F-47的战略博弈与隐忧挑战
花开不败春满城 | 昆明旅游超全攻略,解锁自然与人文的双重魅力
心血管常用药物服用时间全解析:阿司匹林、降压药、他汀类药物何时服用效果最佳?
三大运营商保号套餐全攻略:5/8元保底,每月省百元
业主如何打赢物业合同纠纷赔偿
兰州中川国际机场三期扩建工程建成投运
机器人与“脊髓假体”首次无缝集成,可恢复瘫痪者运动能力
王维10首经典禅意诗:行到水穷处,坐看云起时!首首有名句,一首一禅理!
-3%→9.99%!A股,尾盘异动!
计算机网络物理层全解析:从线缆到信号的奥秘
二两九钱男命详解:运势、事业、感情、财运全解析
武汉租房攻略:从找房到入住全方位指南
HKICPA报名费全解析:费用明细、缴纳与退费流程
劳务外包和劳务派遣的区别及时间规定
杭州市消保委发布物业服务质量评测报告:高价小区在三方面需改进
美"尼米兹"号航母明年转隶诺福克 进入退役流程
生产车间员工效率提升:计件工资怎么算才公平?送你一套可落地的薪酬设计模型
眼睛复视能自己恢复吗?不同原因的处理方法详解
从“抢车位”到“智慧停”, 智能泊位管理器让城市停车更智能、更从容
osu!游戏模式和玩法详解
针灸减肥:效果与注意事项全解析
針灸原理功效中醫全解構|健脾助減肥、改善暗瘡臭狐|梅花針解決脫髮問題