当前位置:网站首页>leetcode:149. 直线上最多的点数
leetcode:149. 直线上最多的点数
2022-08-03 02:04:00 【OceanStar的学习笔记】
题目来源
题目描述


class Solution {
public:
int maxPoints(vector<vector<int>>& points) {
}
};
int main() {
Solution a;
vector<vector<int>> p {
{
1, 1}, {
3, 2}, {
5, 3}, {
4, 1}, {
2, 3}, {
1, 4}};
auto n = a.maxPoints(p);
std::cout << n << "\n";
return 0;
}
题目解析
- 思路:
- 斜率相同的点在同一条直线上
- 两个点可以确定一条直线,有这么几种情况:
- 正常的斜率
- 共点,在同一个位置,要算两份
- 水平线,斜率为0
- 共竖线
- 问题是double会精度损失,怎么表示斜率呢?
- 可以用分数来表示斜率,比如"1_3",相同的斜率那么求公约数
- 也可以map套map。
- key = 3
- value = {7, 10}:斜率为3/7的点,一共有10个
- value = {5, 14}:斜率为3/5的点,一共有14个
class Solution {
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
public:
int maxPoints(vector<vector<int>>& points) {
int N = points.size();
if(N <= 1){
return N;
}
std::map<std::string, int> map;
int res = 0;
for (int i = 0; i < N; ++i) {
map.clear();
int samePos = 1;
int sameX = 0;
int sameY = 0;
int line = 0;
for (int j = i + 1; j < N; ++j) {
//i号点和j号点的斜率关系
int x = points[j][0] - points[i][0];
int y = points[j][1] - points[i][1];
if(x == 0 && y == 0){
samePos++;
}else if(x == 0){
sameX++;
}else if(y == 0){
sameY++;
}else{
int g = gcd(x, y);
x /= g;
y /= g;
std::string key = std::to_string(x) + "/" + std::to_string(y);
++map[key];
line = std::max(line, map[key]);
}
}
res = std::max(res, std::max(std::max(sameX, sameY), line) + samePos);
}
return res;
}
};
边栏推荐
猜你喜欢

【Swoole系列3.3】单进程管理Process

扩展卡尔曼滤波【转】

Rust Web(三)—— 通过sqlx连接数据库(MySQL)

lombok 下的@Builder和@EqualsAndHashCode(callSuper = true)注解

Incorrect datetime value: ‘2022-01-01‘ for function str_to_date

网易数帆陈谔:云原生“牵手”低代码,加速企业数字化转型

vs studio install opencv environment

粘包与拆包

QCheckBox、margin、border、pandding、QHoxLayout、QSplitter、QSpacerItem

大厂标配 | 百亿级并发系统设计 | 学完薪资框框涨
随机推荐
iNFTnews | 元宇宙的潜力:一股推动社会进步的力量
IDEA基本使用-创建和删除项目
能添加任意贴图超级复布局的初级智能文本提示器(超级版)
项目管理到底管的是什么?
【7.31】代码源 - 【矩阵操作】【宝箱】【New Stone Game】【等差数列】
堆的应用:堆排序和TOP-K问题
openCV第二篇
简单的布局的初级智能文本提示器
ROS计算图——rqt_graph
46LVS+Keepalived群集
kubernetes部署ldap
新库上线 | CnOpenDataA股上市公司董监高信息数据
Topic Modeling of Short Texts: A Pseudo-Document View
QWidget、QPushButton、
任意版本JLink驱动官方下载指引
Excel 如何比较两列字符串是否相同?
【静态类型和动态类型 编译检查和运行检查 Objective-C中】
pytest:如何调用 pytest
sql注入是什么意思以及防止sql注入?
代码工具推荐