题目及题目来源

链接:https://www.nowcoder.com/questionTerminal/bfc691e0100441cdb8ec153f32540be2
来源:牛客网 首页 > 试题广场 > max-points-on-a-line
[编程题]max-points-on-a-line
热度指数:67696 时间限制:1秒 空间限制:32768K
算法知识视频讲解 Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

题解 及完整类

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
int high=0; //++high mode
struct Point {
int x;
int y;
Point() : x(0), y(0) {}
Point(int a, int b) : x(a), y(b) {}
};
/* 链接:https://www.nowcoder.com/questionTerminal/bfc691e0100441cdb8ec153f32540be2
来源:牛客网 需要两重循环,第一重循环遍历起始点a,第二重循环遍历剩余点b。 a和b如果不重合,就可以确定一条直线。 对于每个点a,构建 斜率->点数 的map。 (1)b与a重合,以a起始的所有直线点数+1 (用dup统一相加) (2)b与a不重合,a与b确定的直线点数+1
*/ class Solution {
public:
int maxPoints(vector<Point> &points) {
int size=points.size(); if(size==0)return 0;
else if(size==1)return 1;
else if(size==2) return 2;
int ret=0; for(int i=0;i<size;i++){ //遍历起点a map<double,int>mp; //构建斜率->点数的map集合
int vcent=0; //垂直的点
int dub=0; //重合的点 for(int j=0;j<size;j++){ //枚举起点b
if(i==j)continue; //确定x,y的差值: x1,x2
double x1 = points[i].x-points[j].x;
double y1 = points[i].y-points[j].y; //重合的情况
if(x1==0&&y1==0){
dub++;
ret=max(ret,dub+1);
} //垂直线上的情况
else if(x1==0){
vcent++;
ret=max(ret,1+dub+vcent);
}
// 求出斜率,保存到map中
else{
double k=y1/x1;
mp[k]++;
ret=max(ret,1+dub+mp[k]);
} // cout<<"i= "<<i<<" j="<<j<<" ret="<<ret;
// printf(" dub=%d vent=%d\n",dub,vcent);
}
// cout<<endl;
}
return ret;
}
};
//void debug(vector<Point> points){ //输出重复的点的情况,并且最后输出去重的vector表
// int len=points.size();
//
// map<int,int>mp;
//
// for(int i=0;i<points.size();i++){
// for(int j=points.size()-1;j>i;j--){
// if(points[i].x==points[j].x&&points[i].y==points[j].y){
// mp[i]++;
// points.erase(points.begin()+j);
// j=points.size();
// }
// }
// }
// map<int,int>::iterator it=mp.begin();
// for(;it!=mp.end();it++){
// cout<<it->first<<"******"<<it->second<<endl;
// }
// cout<<endl;
//}
int main(){ int n;
char arr[12][12];
memset(arr,' ',sizeof(arr));
while(1){ cin>>n;
vector<Point>p;
int x,y; for(int i=0;i<n;i++){
scanf("%d%d",&x,&y); p.push_back(Point(x,y)); // arr[x][y]='*';
} debug(p); Solution s;
cout<<s.maxPoints(p)<<endl; }
// cout<<"_____________________"<<endl;
// for(int i=0;i<10;i++){
// arr[i][11]='\0';
// cout<<arr[i]<<endl;
// }
// cout<<"_____________________"<<endl; return 0;
}

简单测试数据


/*
思路: 穷举,
用例:
9
84 250 0 0 1 0 0 -70 0 -70 1 -1 21 10 42 90 -42 -230
3
1 1 1 1 1 1
4
1 1 1 1 1 1 2 3
5
1 1 1 1 1 1 2 3 2 3
6
1 1 1 1 1 1
2 3 2 3 4 67
1
0 0 用例:
[(84,250),(0,0),(1,0),(0,-70),(0,-70),(1,-1),(21,10),(42,90),(-42,-230)] 对应输出应该为: 6 你的输出为: 96 7 8 9 2 6 4 7 2 9 */
/*
ctrl+E ,复制行
ctrl+shift+A :整体缩进对齐
ctrl+D: 删除当前行
*/

[牛客网 -leetcode在线编程 -01] max-points-on-a-line -穷举的更多相关文章

  1. [牛客网 -leetcode在线编程 -02] minimum-depth-of-binary-tree -树的最短深度

    题目描述 题目描述 Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along ...

  2. 牛客网-Beautiful Land 【01背包 + 思维】

    链接:https://www.nowcoder.com/acm/contest/119/F来源:牛客网 Now HUST got a big land whose capacity is C to p ...

  3. 牛客网/LeetCode/七月在线/HelloWorld114

    除了知乎,还有这些网站与offer/内推/秋招/春招相关. 其中HelloWorld114更是囊括许多IT知识. 当然,我们可以拓宽思考的维度,既然课堂上的老师讲不好,我们可以自己找资源啊= => ...

  4. JavaScript编程那些事(牛客网 LeetCode)

    计算给定数组 arr 中所有元素的总和 本人提供常规方法 function sum(arr) { var len = arr.length; var sum = 0; if(len == 0){ su ...

  5. 牛客网-3 网易编程题(1拓扑&2二叉树的公共最近祖先&3快排找第K大数)

    1. 小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量.这些钻石的重量各不相同.在他们们比较了一段时间后,它们看中了两颗钻石g1和g2.现在请你根据之前比较的信息判断这两颗钻石的哪颗更 ...

  6. LeetCode(149) Max Points on a Line

    题目 Given n points on a 2D plane, find the maximum number of points that lie on the same straight lin ...

  7. JS-03 牛客网练习

    1.很多人都使用过牛客网这个在线编程网站,下面是自己做的该项所有练习,已通过网站和老师检查无误,分享给大家. 2.先说一下题目的位置:牛客网https://www.nowcoder.com/activ ...

  8. 2018牛客网暑期ACM多校训练营(第十场)J Rikka with Nickname(二分,字符串)

    链接:https://ac.nowcoder.com/acm/contest/148/J?&headNav=acm 来源:牛客网 Rikka with Nickname 时间限制:C/C++ ...

  9. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

随机推荐

  1. sql多列值一行显示

    select stuff(( select ',' + UserNM from tblSysUser for xml path('')), 1,1,'')

  2. LeetCode 496. 下一个更大元素 I(Next Greater Element I) 35

    496. 下一个更大元素 I 496. Next Greater Element I 题目描述 给定两个没有重复元素的数组 nums1 和 nums2,其中 nums1 是 nums2 的子集.找到  ...

  3. 【面试】IP数据报格式分析

    (除选项外的报头区总共20个字节) 1)版本:IPV4/IPV6 2)头长度:报头区长度,用于计算数据区的开始位置,比如头长度为6,代表报头区长度为6*4个字节,头长度的单位为4字节,所以报头区长度不 ...

  4. 06-switch语句

    switch语句 switch是一个条件语句,它是可以代替多个if else的常用方式 例子 package main import "fmt" func main() { a:= ...

  5. Detecting GAN-generated Imagery using Color Cues

    Abstract     论文创新点:分析流行GAN网络结构得知,GAN网络生成得图片在颜色处理与真实摄像机拍摄的照片存在不同,主要表现在两方面.     实验结果:证明了两种线索能够有效区分GAN生 ...

  6. python threading模块的Lock和RLock区别

    首先了解这两者是什么. 以下说明参考自python官网 Lock:Lock被称为①原始锁,原始锁是一个②在锁定时不属于特定线程的同步基元组件,它是能用的最低级的同步基元组件.原始锁处于 "锁 ...

  7. python多线程一些知识点梳理

    学习python的进程和线程以来,对这两个概念一直都处于模糊状态,所以决定花点时间好好学习一下这块知识.以下是我自己在学习过程中形成的一些疑问以及搜集的一些相应的比较好的答案,整理如下,方便复习自查. ...

  8. SQL递归获取树型路径中文名称

    项目中遇到一个树型结构表要根据任意传入节点获取它从根节点一直到自身节点的全部路径的中文名称,并且用'>'与分隔. 我使用在sqlServer中写了一个解析函数方便开发调用. USE [RP_ER ...

  9. Spring Boot + RabbitMQ 配置参数解释

    最近生产RabbitMQ出了几次问题,所以抽时间整理了一份关于Spring Boot 整合RabbitMQ环境下的配置参数解释,通过官网文档和网上其他朋友一些文章参考归纳整理而得,有错误之处还请指正~ ...

  10. C语言中特殊字符含义

    字符 中文 英文 说明  \n  换行符  newline     \t      Tab键  \b    backspace  退格键