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

LeetCode: Max Points on a Line

2014-04-08 01:51 357 查看
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

固定一点,计算每一条经过这个店的直线斜率,用一个hashmap记录。记录下最多的斜率个数。对每个点做一次这样的搜索,这样复杂度就是O(n^2)

/**
* 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;
if(points.length == 1) return 1;
int max = 0;
for(int i = 0; i < points.length; i++) {
HashMap<Float, Integer> hm = new HashMap<Float, Integer>();
int same = 0;
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) {same++; continue;}
float slope = ((float)(points[i].y - points[j].y))/(points[i].x - points[j].x);
if(hm.containsKey(slope))
hm.put(slope, hm.get(slope) + 1);
else
hm.put(slope, 2);
}
for(float k : hm.keySet()) {
hm.put(k, hm.get(k) + same);
}
for(int v : hm.values()) {
if(v > max) max = v;
}
if(same+1 > max)
max = same+1;
}
return max;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode algorithm