class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param points int整型vector<vector<>> 
     * @return int整型
     */
    int maxPoints(vector<vector<int> >& points) {
        // write code here
        int small = INT_MAX, big = INT_MIN;
        for (int i = 0; i < points.size(); ++i)
        {
            small = min(small, min(points[i][0], points[i][1]));
            big = max(big, max(points[i][0], points[i][1]));
        }
        int ret = big - small;
        vector<vector<int>> vv(ret + 1, vector<int>(ret + 1));
        for (int i = 0; i < points.size(); ++i)
            vv[points[i][0] - small][points[i][1] - small] = 1;

        int nums = 0;
        for (int j = 0; j < ret + 1; ++j)
        {
            int count = 0;
            int m = j, n = ret;
            while (m >= 0 && n >= 0)
            {
                if (vv[m][n] == 1)
                    ++count;
                --m;
                --n;
            }
            nums = max(nums, count);
        }
        for (int j = 0; j < ret + 1; ++j)
        {
            int count = 0;
            int m = j, n = 0;
            while (m >= 0 && n <= ret)
            {
                if (vv[m][n] == 1)
                    ++count;
                --m;
                ++n;
            }
            nums = max(nums, count);
        }
        return nums;
    }
};