美文网首页LeetCode蹂躏集
LeetCode 447. Number of Boomeran

LeetCode 447. Number of Boomeran

作者: alexsssu | 来源:发表于2018-01-29 10:12 被阅读0次

    题意:在一堆点中找符合条件的点的总组数:每组点共有三个,且第一个点到第二个点和到第三个点的距离相同。点的顺序不同表示不同的组数。
    解题:用一个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;
        }
    };
    

    相关文章

      网友评论

        本文标题:LeetCode 447. Number of Boomeran

        本文链接:https://www.haomeiwen.com/subject/kwqtzxtx.html