题目:
在二维平面上给定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; } }