Max Points on a Line (Java)

19 篇文章 0 订阅
13 篇文章 0 订阅

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

用斜率算,遍历每一个点,然后以这个点和剩下的所有点连线,斜率相同的放在hash的同一位置。如果有和这个点相同的点统计下来最后算进去。

Source

    public int maxPoints(Point[] points) {
    	if(points.length <= 1) return points.length;
    	
    	int max = 1;
    	for(int i = 0; i < points.length; i++){
    		HashMap<Float, Integer> hm = new HashMap<Float, Integer>();  //注意key是float类型,并且必须是Float Integer而非float int
    		int k = 0, lmax = 1;
    		for(int j = 0; j < points.length; j++){
    			if(i == j) continue;
    			if(points[i].x == points[j].x && points[i].y == points[j].y){  //***跟当前i点重合的点的个数
    				k ++;
    				continue;
    			}
    			float slope = ((float)(points[i].y - points[j].y) / (points[i].x - points[j].x));
    			//运算时一定要在等式右边加上float,否则是将数当做整型运算完再赋值给左边的float
    			
    			if(hm.containsKey(slope)){
    				hm.put(slope, hm.get(slope) + 1);
    			}
    			else hm.put(slope, 2);
    			
    		}
    		for(Integer val : hm.values())
    			lmax = Math.max(lmax, val);
    		lmax += k;
    		max = Math.max(max, lmax);
    	}
    	return max;
    }


Test

    public static void main(String[] args){
    	Point[] points = new Point[2];
    	Point a = new Point(1,2);
    	points[0] = a;
    	points[1] = a;
    	System.out.println(new Solution().maxPoints(points));
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值