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

[LeetCode] Max Points on a Line

2014-08-15 14:56 309 查看
Max Points on a Line Total Accepted: 16037 Total Submissions: 148156 My Submissions

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

注意考虑没有斜率的情况需要特殊考虑,还要考虑有重复点的情况

public class MaxPointsOnALine {
static class Point {
int x;
int y;
Point(){
x = 0;
y = 0;
}
Point(int a, int b){
x = a;
y = b;
}
}

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

int n = points.length;
if (n == 1) {
return 1;
}

int maxLine = 0;
for (int i = 0; i < n; i++) {
int samePoint = 0;
int noK = 0;
int zeroK = 0;
Point curPoint = points[i];
Map<Double, Integer> kMap = new HashMap<Double, Integer>();
for (int j = 0; j < n; j++) {
Point point = points[j];
if (curPoint.x == point.x && curPoint.y == point.y) {
samePoint++;
} else if (curPoint.x == point.x) {
noK++;
} else if (curPoint.y == point.y) {
zeroK++;
} else {
double k = ((double) curPoint.y - (double) point.y) / (curPoint.x - point.x);
if (kMap.containsKey(k)) {
kMap.put(k, kMap.get(k) + 1);
} else {
kMap.put(k, 1);
}
}
}

if (maxLine < (noK + samePoint)) {
maxLine = noK + samePoint;
}
if (maxLine < (zeroK + samePoint)) {
maxLine = zeroK + samePoint;
}

for (Integer value : kMap.values()) {
if (value + samePoint > maxLine) {
maxLine = value + samePoint;
}
}
}

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