当前位置:网站首页>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;
}
边栏推荐
猜你喜欢
随机推荐
LeetCode 952. Calculate Maximum Component Size by Common Factor
阿里巴巴政委体系-第九章、阿里政委启示录
The effective square of the test (one question of the day 7/29)
阿里巴巴政委体系-第五章、阿里政委体系建设
MySQL 主从,6 分钟带你掌握!
ScrollView嵌套RV,滑动有阻力不顺滑怎么办?
从文本匹配到语义相关——新闻相似度计算的一般思路
线上一次JVM FullGC搞得整晚都没睡,彻底崩溃
Postgresql-xl全局快照与GTM代码走读(支线)
多模态 参考资料汇总
告诉你0基础怎么学好游戏建模?
Matlab论文插图绘制模板第42期—气泡矩阵图(相关系数矩阵图)
Solution for no navigation bar after Word is saved as PDF
Introduction to Cosine Distance
ECCV 2022 Oral | 满分论文!视频实例分割新SOTA: IDOL
DeepMCP网络详解
flex布局
力扣解法汇总899-有序队列
傅里叶变换(深入浅出)
图像超分——Real-ESRGAN快速上手








