Max Points on a Line

/**
 * 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) {
        // ref http://www.cnblogs.com/springfor/p/3896120.html
        // ref http://blog.csdn.net/linhuanmars/article/details/21060933
        if(points==null || points.length==0) return 0;
        if(points.length==1) return 1;
        int max = 1;
        double slope = 0.0;
        for(int i=0;i<points.length-1;i++){
            int local = 1;
            HashMap<Double, Integer> hm = new HashMap<Double, Integer>();
            int same = 0;             // points that are on the same position of i
            for(int j=i+1;j<points.length;j++){
                if(points[i].x ==points[j].x &&points[i].y ==points[j].y){
                    same++;
                    continue;
                }else if(points[i].y ==points[j].y){
                    slope  =0.0;
                }
                else if (points[i].x ==points[j].x){
                    slope  =(double) Integer.MAX_VALUE; 
                }
                else
                    slope = (double)(points[i].y - points[j].y)/(points[i].x - points[j].x); 
                if(hm.containsKey(slope)){
                    hm.put(slope,hm.get(slope)+1);
                }else{
                    hm.put(slope,2);
                }
            }
            for(Integer v: hm.values()){
                local = Math.max(local, v);
            }
            local += same;
            max = Math.max(max,local);
        }
        return max;
    }
}

 

posted @ 2015-04-23 14:05  世界到处都是小星星  阅读(119)  评论(0编辑  收藏  举报