Leetcode 447 Number of Boomerangs

又是一道查找表的题目,题目的思路是二重循环求每个点和其它点的距离,将距离作为map的key,如果距离相同则对value+1。

我们需要对每个点求出boomerangs,然后进行累加得到结果。

class Solution {
public:
    int getDistance(pair<int, int> pa, pair<int, int> pb) {
        return (pa.first - pb.first) * (pa.first - pb.first) + (pa.second - pb.second) * (pa.second - pb.second);
    }
    
    int numberOfBoomerangs(vector<pair<int, int>>& points) {
        int res = 0;
        
        for(int i=0; i<points.size(); ++i) {
            unordered_map<int, int> hashmap;
            
            for (int j=0; j<points.size(); ++j) {
                if (i != j) {
                    int distance = getDistance(points[i], points[j]);
                    ++hashmap[distance];
                }
            }
            
            unordered_map<int,int>::iterator it;
            it = hashmap.begin();

            while (it != hashmap.end()) {
                int num = it->second;
                res += num * (num - 1);
                ++it;
            }
        }
        
        return res;
        
    }
};

 

posted @ 2018-08-31 14:30  ly-bnu  阅读(95)  评论(0)    收藏  举报