一、穷举法解题
对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上
解题过程分析:
1、用穷举法考虑在同一条直线上的点的相同点:斜率相同。
2、但是如果直接使用除法的话,可能会出现由于四舍五入带来的精度问题。
3、考虑用乘法代替除法。
4、点重合怎么办,找重合的点。
import java.util.*;
/*
* public class Point {
* int x;
* int y;
* }
*/
public class Solution {
/**
*
* @param points Point类一维数组
* @return int整型
*/
public int maxPoints (Point[] points) {
// write code here
int len=points.length;
if(len<=2||points==null)
return len;
int maxp=0;
//如果第i个和第j个点在第一条直线上,判断和他们两在同一条直线上的点的个数
for(int i=0;i<len-1;i++){
int count=0;
int x=points[i].x;
int y=points[i].y;
int xx=x-points[i+1].x;
int yy=y-points[i+1].y;
//如果两个点重合
if(xx==0&&yy==0){
for(int j=0;j<len;j++){
if(x==points[j].x&&y==points[j].y)
count++;
}
}else{
for(int j=0;j<len;j++){
if(yy*(x-points[j].x)==xx*(y-points[j].y))
count++;
}
}
maxp=Math.max(count,maxp);
}
return maxp;
}
}