美文网首页
leetcode--03.位于同一条直线上点最大个数

leetcode--03.位于同一条直线上点最大个数

作者: yui_blacks | 来源:发表于2018-11-14 23:05 被阅读0次

题目:
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line
给定二维平面上的n个点,求出位于同一直线上的点的最大个数

思路:
相同的点算多个,这一点也是醉了
斜率无限大情况和相同点的情况要考虑到
还有map中的key,-0和+0算两个key
以及浮点数的精度问题

暂定这样,以后会回来修改,思路有,实现起来太恶心,还有牛客的测试用例和leetcode不一样

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

public class Solution {
    public int maxPoints(Point[] points) {
        int length = points.length;
        if (length == 0 || length == 1 || length == 2)
            return length;
        float gradients[][] = new float[length][length];
        Map<Float, Integer> map[] = new Map[length];
        int sames[] = new int[length];
        for (int i = 0; i < length; ++i) {
            float tmp;
            map[i] = new HashMap<Float, Integer>();
            for (int j = 0; j <= i; ++j) {
                if (j == i)
                    gradients[i][j] = tmp = Float.MAX_VALUE; // 代表两个点相同
                else {
                    if (points[i].x == points[j].x) {
                        if (points[i].y == points[j].y) {
                            sames[i]++; // 代表点i前面i-1个点中有多少个相同的点
                            gradients[i][j] = tmp = Float.MAX_VALUE;
                        } else
                            gradients[i][j] = tmp = Float.MIN_VALUE; // 代表斜率为无穷
                    } else
                        gradients[i][j] = tmp = (float) (points[i].x - points[j].x)
                                / (float) (points[i].y - points[j].y);
                }
                if (tmp != Float.MAX_VALUE) {
                    Integer t = map[i].get(tmp);
                    if (t == null)
                        t = 0;
                    map[i].put(tmp, t + 1);
                }
            }
        }

        int bigest = 0;
        for (int i = 0; i < length; ++i) {
            int same = sames[i];
            if (same > bigest) {
                bigest = same;
            }
            for (int m : map[i].values()) {
                if (m == Float.MAX_VALUE)
                    continue;
                int tmp = m + same;
                if (tmp > bigest)
                    bigest = tmp;
            }
        }
        return bigest + 1; // 别忘了把此点本身加上
    }
}

相关文章

  • leetcode--03.位于同一条直线上点最大个数

    题目:Given n points on a 2D plane, find the maximum number ...

  • [56]直线上的点-吉比特2018秋

    1.题目描述 给定N个三维坐标点(包含整形x,y,z),找到位于同一条直线上点的最大个数。 输入说明:第一行输入坐...

  • 教《平行线》后感

    同一平面内两条直线的位置关系——平行,相交。 有两条直线相交的,还有三条直线相交的,相应知识点同学...

  • 平行的判定,平行线的性质

    平行的定义是什么?平行的定义就是在同一平面内,两条没有共点的直线。如果判断两条直线平行?两条直线被一条直线所截,而...

  • 科学的修正

    科学定律的演绎 张宇 两条平行的直线 在同一平面内 永远不会相交 相距遥远的两条直线 在同一平面内向前延伸 穿过了...

  • 020-Opencv笔记-霍夫直线

    霍夫直线 对于任意一条直线上的所有点来说 变换到极坐标中,从[0~360]空间,可以得到r的大小 属于同一条直线上...

  • 【生活随笔】两条线

    在数学中我们很熟悉一条定律:在同一平面中两条直线或平行或相交。 在人生的轨迹中,人与人多么像在同一空间中的两条直线...

  • 两个问题

    1.满足这个关系的点都在同一条直线上吗? 答:满足这个关系都在同一条直线上。因为它们的比值一定,都是正比例,而组成...

  • 同一直线最大点数问题

    原题:Given n points on a 2D plane, find the maximum number ...

  • 直线交点个数公式,直线分割平面练习题以及答案与解析

    下面是直线交点个数,如何减少交点,直线分割平面个数的相应练习题。有时间的同学可以做一做。 ①平面内两两相交的5条直...

网友评论

      本文标题:leetcode--03.位于同一条直线上点最大个数

      本文链接:https://www.haomeiwen.com/subject/ekrsfqtx.html