在一个给定的n个点的平面,找到最多有多少个点在同一直线上。
思路:首先计算出重合的点个数val1
在计算出垂直的点个数val2
再利用map 集合存储斜率与个数。
最后比较求出最大值。
import java.util.*;
public class Solution {
public int maxPoints(Point[] points) {
int len=points.length;
if(len<=2)
return len;
int result=0;
for(int i=0;i<len;i++){
int val1=1;//重合
int val2=0;//垂直
Point a=points[i];
Map<Float,Integer> map=new HashMap<>();
for(int j=0;j<len;j++){
if(i==j)continue;
Point b=points[j];
if(a.x==b.x){
if(a.y==b.y)
val1++;
else
val2++;
}else{
float tem=(float)(a.y-b.y)/(a.x-b.x);
if(map.get(tem)==null)
map.put(tem,1);
else{
map.put(tem,map.get(tem)+1);
}
}
}
int flag=val2;
for(float f:map.keySet()){
flag=flag>map.get(f)?flag:map.get(f);
}
result=result>flag+val1?result:flag+val1;
}
return result;
}
}