您的位置:首页 > 其它

Leetcode Max Points on a Line

2016-06-07 21:45 489 查看
Given n points
on a 2D plane, find the maximum number of points that lie on the same straight line.

Difficulty: Hard

Solution: Traverse every pair of points, if their slope are the same, they will be on the same line. Build a hashtable to record it.

/**
* Definition for a point.
* class Point {
* int x;
* int y;
* Point() { x = 0; y = 0; }
* Point(int a, int b) { x = a; y = b; }
* }
*/
import java.util.Hashtable;
import java.util.Enumeration;

public class Solution {
public int maxPoints(Point[] points) {
int res = 0;
if(points.length == 0)
return 0;
if(points.length == 1)
return 1;
if(points.length == 2)
return 2;
for(int i = 0; i < points.length - 1; i++){
int x1 = points[i].x;
int y1 = points[i].y;
Hashtable<Double, Integer> maps = new Hashtable<Double, Integer>();
//Hashtable<double, Integer> maps = new Hashtable<double, Integer>();
int ver = 0, par = 0;
int general = 0;
for(int j = i + 1; j < points.length; j++){
if(x1 == points[j].x && y1 == points[j].y){
general++;
continue;
}
if(x1 == points[j].x){
ver++;
continue;
}
if(y1 == points[j].y){
par++;
continue;
}
double k = ((double)(points[j].y - y1)) / ((double)(points[j].x - x1));
if(!maps.containsKey(k)){
maps.put(k, 1);
}
else{
maps.put(k, maps.get(k) + 1);
}
}

Enumeration<Double> enumKey = maps.keys();
int ans = 0;
while(enumKey.hasMoreElements()) {
double key = enumKey.nextElement();
int val = maps.get(key);
ans = Math.max(val, ans);
}
ans = Math.max(ans, ver);
ans = Math.max(ans, par);
res = Math.max(ans + general + 1, res);

}
return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: