题目:
在二维平面上给定n点,找出在同一直线上的最大点数。
给出点的定义:
public class Point {
int x;
int y;
Point() { x = 0; y = 0; }
Point(int a, int b) { x = a; y = b; }
}
思路:
对于第i个点,
从第1次,遍历i+1到最后一个点,判断与第i 个点的关系;
从第2次,遍历i+2到最后一个点,判断与第i 个点的关系;
满足 在相同位置 或 斜率相同 都符合条件
代码:
public class HelloJava {
public int maxPoints(Point[] points) {
// 0个点
if (points.length == 0) {
return 0;
}
//1个点 || 2个点
if (points.length <= 2) {
return points.length;
}
//多于2个点
int max=2;
for(int i=0;i<points.length;i++) {
int samePosition=0;//相同位置的点
int sameSlope=1;//相同斜率的点
for(int j=i+1;j<points.length;j++) {
int positionX=points[j].x-points[i].x;
int positionY=points[j].y-points[i].y;
if(positionX==0&&positionY==0) { //是相同位置
samePosition++;
}else { //是相同斜率
sameSlope++;
for(int k=j+1;k<points.length;k++) {
int positionX2=points[k].x-points[i].x;
int positionY2=points[k].y-points[i].y;
if(positionX*positionY2==positionY*positionX2) {
sameSlope++;
}
}
}
if(max<samePosition+sameSlope) {
max=samePosition+sameSlope;
}
sameSlope=1;
}
}
return max;
}
}