美文网首页
Leetcode 149. 直线上最多的点数

Leetcode 149. 直线上最多的点数

作者: 枫叶忆 | 来源:发表于2019-06-03 10:27 被阅读0次

    给定一个二维平面,平面上有 个点,求最多有多少个点在同一条直线上。

    分析:

    暴力破解

    根据两点确定一条直线原理,我们可以选取两个点确定一条直线,再看看其他的点有多少位于这条直线上

    第一,斜率的计算,如果用除法计算斜率,会有斜率为无穷大的问题,另外除法的结果是浮点数,可能会有不精确的问题,所以我们使用乘法来进行斜率的比较,当然乘法也要注意,int的乘法结果可能会超出上限,要用long来保存乘法结果

    第二,重复点的问题,如果一开始选取用来确定一条直线的两个点是重复点就会造成问题,应该跳过这种情况

    代码:
    /**

    * 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) {

            // 如果总坐标点少于 3 个,直接返回答案

            int n = points.length;

            if (points.length <= 2) return n;

            // 搜索直线上最多的点数

            int max = 0;

            for (int i = 0; i < n; i ++) {

                // same 表示有多少个和 i 一样的点

                int same = 1;

                for (int j = i + 1; j < n; j ++) {

                    // cnt 表示除了 i 坐标点外,有多少个点在 i、j 坐标点构成的直线上

                    int cnt = 0;

                    if (points[i].x == points[j].x && points[i].y == points[j].y) {

                        // i、j 是重复点,计数

                        same ++;

                    } else {

                        // i、j 不是重复点,检查其他点是否在这条直线上,j 坐标点也在这条直线上,所以 cnt ++

                        cnt ++;

                        long xDiff = (long)(points[i].x - points[j].x);

                        long yDiff = (long)(points[i].y - points[j].y);

                        for (int k = j + 1; k < n; k ++) {

                            if (xDiff * (points[i].y - points[k].y) == yDiff * (points[i].x - points[k].x)) {

                                cnt ++;

                            }

                        }

                    }

                    // 最大值比较

                    max = Math.max(max, cnt + same);

                }

            }

            return max;

        }

    }

    相关文章

      网友评论

          本文标题:Leetcode 149. 直线上最多的点数

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