LeetCode 447. Number of Boomerangs

题意:在一堆点中找符合条件的点的总组数:每组点共有三个,且第一个点到第二个点和到第三个点的距离相同。点的顺序不同表示不同的组数。
解题:用一个map记录遍历的该点point1的信息,key表示该点到另外点point2的距离,value表示距离point1的距离为key的点的个数。 则若有k个点到point1的距离相等,且k>1,那么从中有顺序的任选2个点的组合数为k*(k-1)。ans表示所有的可能解,也就是最终结果。

class Solution {
public:
    int numberOfBoomerangs(vector<pair<int, int>>& points) {
        int ans = 0;
        for (int i = 0; i < points.size(); ++i) {
            map<long, int> dis;
            for (int j = 0; j < points.size(); ++j) {
                if (i == j)
                   continue;
                long disPoint = 0;
                disPoint += (points[i].first-points[j].first) * (points[i].first-points[j].first);
                disPoint += (points[i].second - points[j].second) * (points[i].second - points[j].second);
                ++dis[disPoint];
            }
            for (map<long,int>::iterator iter = dis.begin(); iter != dis.end(); ++iter) {
                int k = iter->second;
                if (k > 1)
                   ans += k * (k-1);
            }
        }
        return ans;
    }
};
    原文作者:alexssssu
    原文地址: https://www.jianshu.com/p/323f30b0a9fe
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞