Number of Boomerangs

来源:互联网 发布:java调用exe程序 参数 编辑:程序博客网 时间:2024/06/06 11:01

这道题的思路不是很难,就是要挨个算距离,然后做一个表,用排列组合的A算所求的值。问题在于,这道题,可以说是时间换内存。由于平方的数很大,如果你在for的最外边用map,内存是不够的,所以要在第一个平方里面用,会造成一些时间上的重复,ab ba都要算

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

这个很机智,每当要增加一个数,就加上前面的的数*2,比如原来是n,n*(n-1),现在是n+1,(n+1)*(n),相减就是2*n

int numberOfBoomerangs(vector<pair<int, int>>& points) {    int booms = 0;    for (auto &p : points) {        unordered_map<double, int> ctr(points.size());        for (auto &q : points)            booms += 2 * ctr[hypot(p.first - q.first, p.second - q.second)]++;    }    return booms;}


0 0
原创粉丝点击