码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Number of Boomerangs

时间:2017-07-18 15:46:37      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:action   使用   cto   ase   遍历   i++   个数   计算   res   

 

Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of points (i, j, k) such that the distance between iand j equals the distance between i and k (the order of the tuple matters).

Find the number of boomerangs. You may assume that n will be at most 500 and coordinates of points are all in the range [-10000, 10000] (inclusive).

Example:

Input:
[[0,0],[1,0],[2,0]]

Output:
2

Explanation:
The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]

给定一个坐标数组,计算在这组坐标中,某一点到另外任意两个点直接距离相等的组合。假设固定1个点,满足条件的点数为n,则总的组合数为n * (n - 1)。所以使用2层for循环遍历坐标数组,即固定一个点,计算所有与这个点距离相等的点的个数,用map记录符合条件的点的个数。然后将符合条件的点的组合数累加入结果中。

class Solution {
public:
    int numberOfBoomerangs(vector<pair<int, int>>& points) {
        int res = 0;
        for (int i = 0; i != points.size(); i++) {
            unordered_map<int, int> m;
            for (int j = 0; j != points.size(); j++) {
                int a = points[i].first - points[j].first;
                int b = points[i].second - points[j].second;
                m[a * a + b * b]++;
            }
            for (auto it = m.begin(); it != m.end(); it++)
                res += (it->second * (it->second - 1));
        }
        return res;
    }
};
// 283 ms

 

[LeetCode] Number of Boomerangs

标签:action   使用   cto   ase   遍历   i++   个数   计算   res   

原文地址:http://www.cnblogs.com/immjc/p/7200264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!