[leetcode]Max Points on a Line

思路是O(n^2)的,就是取一个点,和其他所有的点比,如果斜率一样的就在一条线上。这里要注意有重复的点,另外,学会了float也可以做map的key,还有map[k]++也覆盖了一开始count为0的情况。

参考:http://blog.csdn.net/doc_sgl/article/details/17103427

#include <unordered_map>

using namespace std;

class Solution {

public:

    int maxPoints(vector<Point> &points) {

        int ans = 0;

        int size = points.size();

        if (size == 0) return 0;

        for (int i = 0; i < size; i++) {

            int duplicate = 1;

            unordered_map<float, int> mp;

            for (int j = 0; j < size; j++) {

                if (i == j) continue;

                if (points[i].x == points[j].x

                    && points[i].y == points[j].y) {

                    duplicate++;

                    continue;

                }

                float k = 0;

                if (points[i].x == points[j].x) k = INT_MAX;

                else {

                    k = (float) (points[i].y - points[j].y) / (points[i].x - points[j].x);

                }

                mp[k]++;

            }

            for (unordered_map<float, int>::iterator it = mp.begin(); it != mp.end(); it++) {

                if (it->second + duplicate > ans)

                    ans = it->second + duplicate;

            }

            if (mp.size() == 0 && duplicate > ans)

                ans = duplicate;

        }

        return ans;

    }

};

  

你可能感兴趣的:(LeetCode)