美文网首页
LeetCode-多点共线

LeetCode-多点共线

作者: SincereDu | 来源:发表于2017-03-22 17:14 被阅读56次

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() == 0)
            return 0;
        
        if (points.size() == 1)
            return 1;
        
        int result = 0;
        double k;
        for (int i = 0;i < points.size();i++){
            map<double,int> kMap;
            int reCount = 0;//重复的点
            int vCount = 1;//竖直的计数
            int currentMax = 1;//当前最大值存储
            
            for (int j = i+1;j < points.size();j++){
                
                if (points[i].x == points[j].x && points[i].y == points[j].y){
                    reCount++;
                }else{
                    
                    if (points[i].x == points[j].x){
                        vCount++;
                        currentMax = max(currentMax,vCount);
                    }else{
                        
                        k = 1.0 * (points[j].y-points[i].y) / (points[j].x-points[i].x);
                        
                        if (kMap[k] == 0)
                            kMap[k] = 2;
                        else
                            kMap[k]++;
                    }
                }
                currentMax = max(kMap[k],currentMax);
            }
            result = max(result,currentMax+reCount);
        }
        return result;
    }
};

按照给出的提示,本题采用的是穷举的思路。
将所有的情况列举出来,这条占点最多的线自然就求出来了。

1、首先,我们将0个点和1个点的情况筛选出来
2、考虑共线的条件:{
斜率相等
竖直
两点相同
}
3、循环走起😄

相关文章

网友评论

      本文标题:LeetCode-多点共线

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