LeetCode | Max Points on a Line

题目:

Given 
n
 points on a 2D plane, find the maximum number of points that lie on the same straight line.



思路:

三层遍历,依次判断是否这些点在一条线路。注意判断两个相同的点的情况。

代码:

/**
 * Definition for a point.
 * struct Point {
 *     int x;
 *     int y;
 *     Point() : x(0), y(0) {}
 *     Point(int a, int b) : x(a), y(b) {}
 * };
 */
class Solution {
public:
    int maxPoints(vector<Point> &points) {
        if(points.size() <= 2){
            return points.size();
        }
        
        int max = 2;
        int cur = 1;
        for(int i = 0; i < points.size(); i++){
            int duplicate = 0;
            for(int j = i + 1; j < points.size(); j++){
                if(points[i].x == points[j].x && points[i].y == points[j].y){
                    duplicate++;
                    continue;
                }
                cur++;
                
                for(int k = j + 1; k < points.size(); k++){
                    if(sameLine(points[i], points[j], points[k])){
                        cur++;
                    }
                }
                
                if(cur + duplicate > max){
                    max = cur + duplicate;
                }
                cur = 1;
            }
            
            if(cur + duplicate > max){
                max = cur;
            }
            cur = 1;
        }
        
        return max;
    }
    
    bool sameLine(Point p1, Point p2, Point p3){
        return (p2.y - p3.y) * (p1.x - p3.x) == (p1.y - p3.y) * (p2.x - p3.x);
    }
};

    原文作者:Allanxl
    原文地址: https://blog.csdn.net/lanxu_yy/article/details/17261833
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞