Max Points on a Line
2014-01-27 06:02
447 查看
Max Points on a Line
Total Accepted: 3457 Total Submissions: 35085MySubmissions
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
http://oj.leetcode.com/problems/max-points-on-a-line/
分别以每个点为原点,计算以该点为原点时,最多有多少个点在同一条线上,只需要计算和该点的斜率,然后用一个 hashmap<slope,count> 存即可。
要特别特别注意的是同一个点出现多次,比如
Point[] = {(0,0) , (1,1), (0,0) }
这里,(0,0) 出现了两次,那么处理的时候,如果和原点是同一个点,不用计算,而是维护一个 counter 来保存有多少个相同点。最后在计算max的时候,要加上相同点,因为相同点可以作为任意一条斜率上的点。
/** * 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; Map<Double, Integer> map = new HashMap<>(); int max = 0; for (int i = 0; i < points.length; i++) { int sameCount = 0; for (int j = i + 1; j < points.length; j++) { double slope = 0.0; if (points[i].x == points[j].x && points[i].y == points[j].y) { sameCount++; continue; } if (points[i].x == points[j].x) slope = Double.MAX_VALUE; else if (points[i].y == points[j].y) slope = 0; else slope = (double)(points[i].y - points[j].y) / (points[i].x - points[j].x); if (!map.containsKey(slope)) map.put(slope, 1); else map.put(slope, map.get(slope) + 1); } if (map.isEmpty()) { if (sameCount > max) max = sameCount; } else { for (Integer n : map.values()) { if (n + sameCount > max) max = n + sameCount; } } map.clear(); } return max + 1; } }
相关文章推荐
- 149. Max Points on a Line
- Max Points on a Line
- 149. Max Points on a Line
- Leetcode 149. Max Points on a Line (Hard) (cpp)
- LeetCode OJ:Max Points on a Line
- Lintcode - Max points on a line
- LeetCode-max-points-on-a-line
- LeetCode | Max Points on a Line
- LeetCode149:Max Points on a Line
- [Leetcode] Max Points on a Line (Java)
- [LeetCode] Max Points on a Line
- [Leetcode][JAVA] Max Points on a Line
- leetcode--Max Points on a Line
- Max Points on a Line
- LeetCode--max-points-on-a-line
- Leetcode 149. Max Points on a Line
- max-points-on-a-line
- max-points-on -a-line
- LeetCode Max Points on a Line
- LeetCode | Max Points on a Line