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));
}
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:Max Points on a Line (Java)
- max-points-on-a-line java code
- LeetCode 149 — Max Points on a Line(C++ Java Python)
- [leetcode-149]Max Points on a Line(java)
- Java for LeetCode 149 Max Points on a Line
- leetcode 149:Max Points on a Line(java实现)细致分析
- [Leetcode] Max Points on a Line (Java)
- Max Points on a Line leetcode java
- [Leetcode][JAVA] Max Points on a Line
- Max Points on a Line
- LeetCode: Max Points on a Line
- Max Points on a Line
- 【LeetCode OJ】Max Points on a Line
- Max Points on a Line
- LeetCode—Max Points on a Line解题报告
- Leetcode Max Points on a Line
- [leetcode]Max Points on a Line
- [leetcode]Max Points on a Line
- LeetCode OJ:Max Points on a Line
- LeetCode - Max Points on a Line