题解

max-points-on-a-line

http://www.nowcoder.com/questionTerminal/bfc691e0100441cdb8ec153f32540be2

注意:需要处理4种特殊情况,无点、单点、双点、全部重复点,另外直线方程用一般式(别用斜率式)以避免垂直 & 斜率不整除的情况

import java.util.*;

/*
 * public class Point {
 *   int x;
 *   int y;
 * }
 */

public class Solution {
    /**
     * 
     * @param points Point类一维数组 
     * @return int整型
     */
    public int maxPoints (Point[] points) {
        // write code here
        if (points == null) {
            return 0;
        }

        int size = points.length;
        if (size <= 0) {
            return 0;
        }
        if (size == 1) {
            return 1;
        }
        if (size == 2) {
            return 2;
        }
        int eqNum = 1;
        for (int m = 1; m < points.length; ++m) {
            if (points[0].x == points[m].x && points[0].y == points[m].y) {
                ++eqNum;
            }
        }
        if (eqNum == points.length) {
            return points.length;
        }

        int max = -1;
        for (int i = 0; i < size-1; ++i) {
            Point p1 = points[i];
            for (int j = i+1; j < size; ++j) {
                Point p2 = points[j];
                if (p1.x == p2.x && p1.y == p2.y) {
                    continue;
                }
                int A = p2.x - p1.x;
                int B = p2.y - p1.y;
                int C = A * p1.y - B * p1.x;
                int len = 2;
                for (int k = 0; k < size; ++k) {
                    if (k == i || k == j) {
                        continue;
                    }
                    Point ph = points[k];

                    if (A * ph.y == B * ph.x + C) {
                        ++len;
                    }
                }
                if (len > max) {
                    max = len;
                }
            }
        }
        return max;
    }
}
全部评论
woc和我想的一样
点赞
送花
回复
分享
发布于 2021-04-29 15:45

相关推荐

1 1 评论
分享
牛客网
牛客企业服务