149. 直线上最多的点数

暴力解法

class Solution {
    public int maxPoints(int[][] points) {

        int max = 1;

        /**
         * 暴力解法
         * 直接将前两个点组成一条直线,然后比较后面的点看有没有在同一直线的
         */
        for (int i = 0; i < points.length; i++) {

            for (int j = i + 1; j < points.length; j++) {

                int j_iX = points[j][0] - points[i][0];
                int j_iY = points[j][1] - points[i][1];
                int count = 2;

                for (int k = j + 1; k < points.length; k++) {

                    int k_iX = points[k][0] - points[i][0];
                    int k_iY = points[k][1] - points[i][1];

                    /**
                     * 为了避免小数造成的精度误差,转换为乘法
                     */
                    if (j_iX * k_iY == j_iY * k_iX){
                        count++;
                    }
                }

                max = Math.max(max, count);
            }
        }

        return max;
    }
}

/**
 * 时间复杂度 O(n^3)
 * 空间复杂度 O(1)
 */

https://leetcode-cn.com/problems/max-points-on-a-line/

posted @ 2021-12-08 17:09  振袖秋枫问红叶  阅读(37)  评论(0)    收藏  举报