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));
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值