leetcode+在同一直线上最多的点数,map哈希,注意特殊情况

点击打开链接
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.empty()) return 0;
        int res = 1;
        for(int i=0; i<points.size(); i++){
            map<long double, int> Map;
            int duplicates = 0, verticals = 1;
            for(int j=i+1; j<points.size(); j++){
                if(points[i].x == points[j].x){
                    verticals +=1;
                    if(points[i].y == points[j].y) duplicates += 1; //重合的点可以放在任何一个组里
                }
            }
            for(int j=i+1; j<points.size(); j++){
                if(points[i].x != points[j].x){
                    long double slope = (long double)(points[i].y - points[j].y) /(points[i].x - points[j].x);
                    if(Map[slope] == 0) Map[slope] = 2; //初始化
                    else Map[slope] +=1;
                    res = max(res, Map[slope]+duplicates);
                }
            }
            res = max(res, verticals); //verticals单独处理
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/u013554860/article/details/80879233
今日推荐