Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
public class Solution {
public int maxPoints(Point[] points) {
if(points.length==1){
return 1;
}
int result=0;
for(int i=0;i<points.length;i++){
int max=0;
int rect=0;
int same=0;
int maxi=0;
Map<Double,Integer> map=new HashMap<Double,Integer>();
for(int j=0;j<points.length;j++){
if((points[i].x==points[j].x)&&(points[i].y==points[j].y)){
same++;
}else if(points[i].x==points[j].x){
rect++;
}else{
double k=(double)(points[j].y-points[i].y)/(points[j].x-points[i].x);
if(map.containsKey(k)){
int temp=map.get(k)+1;
map.put(k,temp);
if(temp>maxi){
maxi=temp;
}
}else{
map.put(k,1);
if(maxi==0){
maxi=1;
}
}
}
}
max=Math.max(rect,maxi)+same;
result=Math.max(result,max);
}
return result;
}
}
Given
n
points on a 2D plane, find the maximum number of points that lie on the same straight line.