在二维平面上给定n点,找出在同一直线上的最大点数。

时间:2021-01-17 14:42:42

题目:

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