题目描述
对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
解题思路:主要是运用了三点共线原理。
先确定两个点可以构成一条线段,运用三点共线原理来判断第三个点是否与确定的两个点共线。
class Point {
int x;
int y;
Point() { x = 0; y = 0; }
Point(int a, int b) { x = a; y = b; }
}
public class Solution {
public int maxPoints(Point[] points) {
if(points==null)return 0;
if(points.length<3)return points.length;
int n=points.length;
int res=0;
for(int i=1;i<n;i++){
int count=0;
int x=points[i].x;
int y=points[i].y;
int dx=points[i-1].x-x;
int dy=points[i-1].y-y;
if(dx==0&&dy==0){
for(int j=0;j<n;j++){
if(points[j].x==x&&points[j].y==y){
count++;
}
}
}else{
for(int j=0;j<n;j++){
if((points[j].x-x)*dy==(points[j].y-y)*dx){
count++;
}
}
}
res=res>count?res:count;
}
return res;
}
}