Leetcode 149 直线上最多的点数

题目

代码分析

如何判断在一个直线上,是本题的关键,对于该题来说,就是要两两匹配其中的点,也就是要通过两层的for循环,前面的算过了,后面就不需要再算了,因为外层的每一次的循环都以一个点为基准,所以只需要判断平行,垂直,水平就可以了,判断是在以一个点开始为基准的。然后就是每一次的外层循环都要初始化一下最大值。

代码实现

class Solution {
    public int maxPoints(int[][] points) {
        if(points.length<=1) return points.length;
        int result=0;
        HashMap<Double,Integer> map;
        for(int i=0;i<points.length-1;i++)
        {
            map=new HashMap<>();
            int max=1;
            int coincide=0;
            int vertical=1;
            int horizontal=1;
            int ix=points[i][0];
            int iy=points[i][1];
            for(int j=i+1;j<points.length;j++)
            {
                int jx=points[j][0];
                int jy=points[j][1];
                double x=ix-jx;
                double y=iy-jy;
                //算出重合的点
                if(x==0&&y==0)
                {
                    coincide+=1;
                }else if(y==0)//算出平行的点
                {
                    horizontal+=1;
                    max=Math.max(max,horizontal);
                }else if(x==0)////算出垂直的点
                {
                    vertical+=1;
                    max=Math.max(max,vertical);
                }
                else
                {
                    double rate=x/y;
                    if(map.containsKey(rate))
                    {
                        map.put(rate,map.get(rate)+1);
                    }else
                    {
                        map.put(rate,2);
                    }
                    max=Math.max(max,map.get(rate));
                }
            }
            result=Math.max(result,max+coincide);
        }
        return result;
    }
}

完成情况

1次

全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
合适才能收到offe...:项目岗是什么岗?我看你有段好像跟策划运营相关,如果找运营的话第三段经历写详细点儿。 个人建议是把自我评价删了换成专业技能放在工作经验上或者下面。学生会那个也可以删,把第一个包装成店铺运营,写4-6给点。第三个也是写4-6个点。注意工作内容➕部分数据。 投递的时候BOS招呼用语改一下,换成我有xx工作经验,熟练掌握xx技能样式,也可以简历截图然后直接发送。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务