跳至主要内容

149. 直线上最多的点数

/**
 * 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();
        }
       
        set<double> find;
        set<double> findx;
        set<double> findy;

        int max = 0;
        for (int i = 0; i < points.size() - 1; i++)
        {
            for (int j = i + 1; j < points.size(); j++)
            {
                if (points[j].x != points[i].x && points[j].y != points[i].y)
                {
                    double d = (double)(points[j].x - points[i].x) / (points[j].y - points[i].y);
                    if (find.find(d)!=find.end())
                    {
                        continue;
                    }
                    find.insert(d);

                    int num = 1;
                    for (int z = 0; z < points.size(); z++)
                    {
                        if (z != i)
                        {
                            double d1 = (double)(points[z].x - points[i].x) / (points[z].y - points[i].y);

                            if (d == d1 || (points[z].x == points[i].x && points[z].y == points[i].y))
                            {
                                num++;
                            }
                        }
                    }

                    if (num > max)
                    {
                        max = num;
                    }
                }
                else if (points[j].y != points[i].y)
                {
                    double d = points[j].x;
                    if (findx.find(d) != findx.end())
                    {
                        continue;
                    }
                    findx.insert(d);

                    int num = 1;
                    for (int z = 0; z < points.size(); z++)
                    {
                        if (z != i)
                        {
                            if (points[z].x == points[i].x)
                            {
                                num++;
                            }
                        }
                    }

                    if (num > max)
                    {
                        max = num;
                    }
                }
                else if (points[j].x != points[i].x)
                {
                    double d = points[j].y;
                    if (findy.find(d) != findy.end())
                    {
                        continue;
                    }

                    findy.insert(d);

                    int num = 1;
                    for (int z = 0; z < points.size(); z++)
                    {
                        if (z != i)
                        {
                            if (points[z].y == points[i].y)
                            {
                                num++;
                            }
                        }
                    }

                    if (num > max)
                    {
                        max = num;
                    }
                }
                else
                {
                    continue;
                }
            }
        }

        if (max == 0)
        {
            return points.size();
        }

        return max;
    }
};

评论

此博客中的热门博文

老毛子路由器无线桥接问题

  信道带宽:改成20M  关闭 DHCP 服务器  关闭动态 (DHCP) 路由 修改IP地址从192.168.123.1到192.168.1.114  无线 AP 工作模式:选择AP-Client+AP 无线 AP-Client 角色:选择LAN bridge 连上上级wifi done 路由器自身可能上不去网,执行: route add default  gw 192.168.1.1 不过这种方式无法翻墙 ////////////////////////////////////////////////////////////// 第二种方式 不改信道不关闭DHCP,保持网段是192.168.123.1 无线 AP 工作模式:选择AP-Client+AP 无线 AP-Client 角色:选择WAN 连上上级wifi done 路由器可以翻墙,但是192.168.1.1的机器访问不了192.168.123.1的机器 解决方法: 在192.168.123.1的机器把想要访问的机器比如192.168.123.100设置DMZ主机,这样就可以访问了,在 192.168.1.1能看到分配的ip比如192.168.1.115