您的位置:首页 > 编程语言 > Java开发

Max Points on a Line (Java)

2015-02-12 14:04 288 查看
Given n points
on a 2D plane, find the maximum number of points that lie on the same straight line.

用斜率算,遍历每一个点,然后以这个点和剩下的所有点连线,斜率相同的放在hash的同一位置。如果有和这个点相同的点统计下来最后算进去。

Source

public int maxPoints(Point[] points) {
if(points.length <= 1) return points.length;

int max = 1;
for(int i = 0; i < points.length; i++){
HashMap<Float, Integer> hm = new HashMap<Float, Integer>(); //注意key是float类型,并且必须是Float Integer而非float int
int k = 0, lmax = 1;
for(int j = 0; j < points.length; j++){
if(i == j) continue;
if(points[i].x == points[j].x && points[i].y == points[j].y){ //***跟当前i点重合的点的个数
k ++;
continue;
}
float slope = ((float)(points[i].y - points[j].y) / (points[i].x - points[j].x));
//运算时一定要在等式右边加上float,否则是将数当做整型运算完再赋值给左边的float

if(hm.containsKey(slope)){
hm.put(slope, hm.get(slope) + 1);
}
else hm.put(slope, 2);

}
for(Integer val : hm.values())
lmax = Math.max(lmax, val);
lmax += k;
max = Math.max(max, lmax);
}
return max;
}

Test

public static void main(String[] args){
Point[] points = new Point[2];
Point a = new Point(1,2);
points[0] = a;
points[1] = a;
System.out.println(new Solution().maxPoints(points));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode