max-points-on-a-line(求最多点数的一条线)

题目描述

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

import java.util.HashMap;
import java.util.Map;

/**
 * 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 <= 2) {
            return points.length;
        }

        int res = 0;
        for(Point p : points) {
            int x = p.x;
            int y = p.y;
            int V = 0, L = 1;
             HashMap<Float, Integer> mp = new HashMap<Float, Integer>();

            for(Point p2 : points) {
                if(!p.equals(p2)) {
                    int x2 = p2.x;
                    int y2 = p2.y;
                    if(x == x2) {
                        if(y == y2) {
                            L++;
                        } else {
                            V++;
                        }
                        continue;
                    }

                    Float k = getSlope(x, y, x2, y2);
                    if(!mp.containsKey(k)) {
                        mp.put(k, 1);
                    } else {
                        int pre = mp.get(k);
                        mp.put(k, ++pre);
                    }

                }


            }
             int Max = V;
             for(Map.Entry<Float, Integer> entry : mp.entrySet()) {
                  Max = Math.max(Max, entry.getValue());
             }
             res = Math.max(res, Max + L);

        }


        return res;
    }

    private Float getSlope(int x, int y, int x2, int y2) {
        return (float)(1.0 * (y - y2) / (x - x2));
    }


}
posted @ 2017-04-09 20:21  cbam  阅读(112)  评论(0编辑  收藏  举报