MaxPointsOnALine

来源:互联网 发布:52kkm软件下载 编辑:程序博客网 时间:2024/06/04 18:05
public static int maxPoints(Point[] points) {Double k = 0.0;int max = 0;if (points.length != 0) {max = 1;}for (int i = 0, length = points.length; i < length - 1; i++) {HashMap<Double, Integer> map = new HashMap<>();int dup = 0;//记录重复点int ver = 0;//记录垂直点int sum = 0;for (int j = i + 1; j < points.length; j++) {k = ((double) points[i].y - points[j].y) / (points[i].x - points[j].x);//计算斜率if (k == -0.0) {k = 0.0;}//0.0=-0.0if (points[j].x == points[i].x && points[j].y != points[i].y) {ver++;//计算垂直点个数} else if (points[j].x == points[i].x && points[j].y == points[i].y) {dup = dup + 1;//计算重复点个数} else if (map.containsKey(k)) {map.put(k, map.get(k) + 1);//用map存储不同斜率对应点的个数} else {// k = ((double) points[i].y - points[j].y) / (points[i].x -// points[j].x);map.put(k, 2);}}if (map.size() == 0 && dup != 0) {dup++;sum = dup + ver;if (max < sum)max = sum;}for (Integer v : map.values()) {sum = v + dup;if (sum > max) {max = sum;}}if (ver != 0) {if(map.size()==0) ver++;sum = dup + ver;if (max < sum)max = sum;}}/* * for (Map.Entry<Double, Integer> entry : map.entrySet()) { * if(entry.getValue()>max){ max=entry.getValue(); } } */return max;}
//历尽千辛万苦呐。。。。。。下一个Action
原创粉丝点击