Leetcode 最多同一直线点
程序员文章站
2022-04-01 17:33:50
...
题目描述
对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
思路:
二重循环 point_i point_j 每次分析起始点point_i分析各个斜率上点的数目
最后输出最多的同一直线上点数目。
class Solution {
public:
int maxPoints(vector<Point> &points) {
int size=points.size();//点的数目
if(size==0 || size==1)
return size;
//point_i
int res=1;//最终结果
for(int i=0;i<size;i++)
{
int cur_res=1;//当前结果 至少包含point_i
map<double,int> mp;//存放指定斜率的点
int dup=0;//重复的点
int vert=0;//垂直的点
for(int j=0;j<size;j++)
{
if(j==i) //遍历所有剩余的点
continue;
int x=points[i].x-points[j].x;
int y=points[i].y-points[j].y;
if(x==0 && y==0) //说明重复
{
dup++;
continue;
}
if(x==0 && y!=0) //计算斜率需要考虑垂直情况
{
if(vert==0) //考虑垂直这条线的所有可能重复的点
vert=2;
else
vert++;
cur_res=max(cur_res,vert);//分析垂直的这条线是否点更多
continue;
}
double ratio=double(y)/double(x);//计算斜率
if(mp[ratio]==0)
mp[ratio]=2;
else
mp[ratio]++;
cur_res=max(cur_res,mp[ratio]);//分析ratio这条线点是否更多
}
//分析完所有斜率的直线结果后,累加上重复的点
cur_res=cur_res+dup;
res=max(res,cur_res);
}
return res;
}
};
推荐阅读
-
【Leetcode】149. Max Points on a Line 149. 直线上最多的点数
-
C4D贝塞尔曲线的两点怎么放到同一水平直线上?
-
leetcode 给定二维平面上的n个点,找到位于同一直线上的最大点数
-
编程题—给定位于二维平面上的n个点,求出位于同一条直线上的最大点数
-
给定二维平面上的n个点,找到位于同一直线上的最大点数
-
每天一道LeetCode-----平面上n个点,计算最多有多少个点在一条直线上
-
LeetCode:对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上
-
给定2D平面上的n个点,找到位于同一直线上的最大点数
-
求最多能有多少个点位于同一直线上
-
[leetcode]给定二维平面上的n个点,找出位于同一直线上的点的最大数目