当前位置:网站首页>149. 直线上最多的点数-并查集做法
149. 直线上最多的点数-并查集做法
2022-08-03 19:36:00 【Mr Gao】
给你一个数组 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
博主也是第一次用并查集这个方法,觉得确实很神奇,这个方法应该可以解决很多很难解决的问题,但是使用起来需要我们多做一些应用:
解题代码如下:
int find(int x,int *p){
while(x!=p[x]){
x=p[x];
}
return x;
}
int maxPoints(int** points, int pointsSize, int* pointsColSize){
int p[pointsSize];
int i,j;
int max=0;
int cei[pointsSize][2];
for(i=0;i<pointsSize;i++){
printf("||");
int cur=0;
for(j=i+1;j<pointsSize;j++){
cei[cur][0]=points[i][0]-points[j][0];
cei[cur][1]=points[i][1]-points[j][1];
cur++;
}
// printf("cur %d |",cur);
int hash[pointsSize];
for(j=0;j<cur;j++){
p[j]=j;
}
for(j=0;j<cur;j++){
hash[j]=0;
for(int k=j+1;k<cur;k++){
if(cei[k][0]*cei[j][1]-cei[k][1]*cei[j][0]==0){
p[k]=j;
}
}
}
for(j=0;j<cur;j++){
max=fmax(max,++hash[find(j,p)]);
// printf("%d %d |",find(j,p),hash[find(j,p)]);
}
}
printf("max %d ",max);
return max+1;
}
边栏推荐
猜你喜欢
Compose原理-compose中是如何实现事件分法的
友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
微信小程序分享功能
友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
高效目标检测:动态候选较大程度提升检测精度(附论文下载)
开源教育论坛| ChinaOSC
怎么将自己新文章自动推送给自己的粉丝(巨简单,学不会来打我)
Internet Download Manager简介及下载安装包,IDM序列号注册问题解决方法
Protobuf Grpc使用异常 类型有未导出的方法,并且是在不同的软件包中定义
Network protocol-TCP, UDP difference and TCP three-way handshake, four wave
随机推荐
机器学习中专业术语的个人理解与总结(纯小白)
标准C语言学习总结11
Standard C language learning summary 11
力扣刷题之合并两个有序数组
CS kill-free pose
LeetCode 622. Designing Circular Queues
if/else或switch替换为Enum
关于2022年度深圳市技术攻关重大项目的申报通知
Brush the topic of mobile zero power button
glide set gif start stop
力扣刷题之移动零
力扣刷题之分数加减运算(每日一题7/27)
Handler 源码解析
Postgresql snapshot optimization Globalvis new system analysis (performance greatly enhanced)
云图说丨初识华为云微服务引擎CSE
Postgresql源码(65)新快照体系Globalvis工作原理分析
盲僧发现了华点——教你如何使用API接口获取数据
ADS 2023 下载链接
分享即时通讯开发之WebSocket:概念、原理、易错常识、动手实践
ctfshow php features