[Leetcode] 447. Number of Boomerangs 解题报告

来源:互联网 发布:itunes上软件版本号 编辑:程序博客网 时间:2024/04/30 02:02

题目

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:2Explanation:The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]

思路

对于每个点,计算出来它和其它所有点的距离。对于每个距离,假设有m个点,则可以构成m * (m - 1)个Boomerangs,返回所有结果之和即可。思路挺简单。

代码

class Solution {public:    int numberOfBoomerangs(vector<pair<int, int>>& points) {        int ret = 0;        for(int i = 0; i < points.size(); ++i) {            unordered_map<long, int> hash;            for(int j = 0; j < points.size(); ++j) {                if(j == i) {                    continue;                }                long dist = (points[i].first - points[j].first) * (points[i].first - points[j].first);                dist += (points[i].second - points[j].second) * (points[i].second - points[j].second);                ++hash[dist];            }            for(auto val : hash) {                ret += val.second * (val.second - 1);            }        }        return ret;    }};

原创粉丝点击