Max Points on a Line
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
一个平面中有很多点,找出能在同一条直线上的最多的点
思路:遍历所有的点,在每次遍历中再依次遍历其他与该点没有计算过斜率的点,计算斜率,并统计数量。
/**
* Definition for a point.
* 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.length==0) return 0;
int max = 1;
//第一个值存放斜率,第二个存放数量
Map<Double,Integer> map = new HashMap<Double,Integer>();
for(int i=0;i<points.length-1;i++)
{
int x=1;
int duplicates = 0;
boolean flag = false;
int tempmax = 1;
map.clear();
for(int j=i+1;j<points.length;j++)
{
//计算重复点
if(points[j].x==points[i].x&&points[i].y==points[j].y)
{
duplicates++;
continue;
}
//判断是否两点共x轴
if(points[j].x-points[i].x!=0)
{
double k = (double)(points[j].y-points[i].y)/(points[j].x-points[i].x);
if(k==-0.0)
k=0.0;
if(map.get(k)==null)
{
map.put(k, 2);
if(tempmax<2) tempmax=2;
}
else
{
int t = (Integer)map.get(k);
t=t+1;
map.put(k,t);
if(t>tempmax) tempmax=t;
}
}else
{
x++;
}
}
if(tempmax+duplicates>max)
max = duplicates+tempmax;
if(x>max) max=x;
}
return max;
}
}