[LeetCode] Max Points on a Line

来源:互联网 发布:云狐网络科技园怎么样 编辑:程序博客网 时间:2024/06/05 17:46
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;    }}


0 0
原创粉丝点击