zoukankan      html  css  js  c++  java
  • [刷题] 447 Number of Boomerangs

    要求

    • 给出平面上n个点,寻找存在多少点构成的三元组(i j k),使得 i j 两点的距离等于 i k 两点的距离
    • n 最多为500,所有点坐标范围在[-10000, 10000]之间

    示例

    • [[0,0],[1,0],[2,0]]
    • 2

    思路

    • 对于每个点i,遍历其余点到i的距离(时间n2,空间n)
    • 查找表记录其他点到 i 的<距离,频次>
    • 对于每个距离,满足条件的三元组个数为:频次 x (频次-1)
    • 求距离时用平方,防止浮点数误差
    • 最长距离,2000^2+2000^2,32位整型不越界

    实现

    • 用pair存储点坐标
     1 #include <iostream>
     2 #include <vector>
     3 #include <unordered_map>
     4 #include <cassert>
     5 #include <stdexcept>
     6 #include <typeinfo>
     7 
     8 using namespace std;
     9 
    10 /// Using Hash Map
    11 /// Time Complexity: O(n^2)
    12 /// Space Complexity: O(n)
    13 class Solution {
    14 public:
    15     int numberOfBoomerangs(vector<pair<int, int>>& points) {
    16 
    17         int res = 0;
    18         for( int i = 0 ; i < points.size() ; i ++ ){
    19 
    20             // record中存储 点i 到所有其他点的距离出现的频次
    21             unordered_map<int, int> record;
    22             for(int j = 0 ; j < points.size() ; j ++)
    23                 if(j != i)
    24                     // 计算距离时不进行开根运算, 以保证精度
    25                     record[dis(points[i], points[j])] += 1;
    26 
    27             for(unordered_map<int, int>::iterator iter = record.begin() ; iter != record.end() ; iter ++)
    28                 res += (iter->second) * (iter->second - 1);
    29         }
    30         return res;
    31     }
    32 
    33 private:
    34     int dis(const pair<int,int> &pa, const pair<int,int> &pb){
    35         return (pa.first - pb.first) * (pa.first - pb.first) +
    36                (pa.second - pb.second) * (pa.second - pb.second);
    37     }
    38 };
    39 
    40 
    41 int main() {
    42     //int a = 1;
    43     vector<pair<int,int>> vec;
    44     vec.push_back(make_pair(0, 0));
    45     vec.push_back(make_pair(1, 0));
    46     vec.push_back(make_pair(2, 0));
    47 
    48     cout << Solution().numberOfBoomerangs(vec) << endl;
    49     return 0;
    50 }
    View Code
    • 用vector存储点坐标
     1 #include <iostream>
     2 #include <vector>
     3 #include <unordered_map>
     4 #include <cassert>
     5 #include <stdexcept>
     6 #include <typeinfo>
     7 
     8 using namespace std;
     9 
    10 /// Using Hash Map
    11 /// Time Complexity: O(n^2)
    12 /// Space Complexity: O(n)
    13 class Solution {
    14 public:
    15     int numberOfBoomerangs(vector<vector<int>>& points) {
    16 
    17         int res = 0;
    18         for( int i = 0 ; i < points.size() ; i ++ ){
    19 
    20             // record中存储 点i 到所有其他点的距离出现的频次
    21             unordered_map<int, int> record;
    22             for(int j = 0 ; j < points.size() ; j ++)
    23                 if(j != i)
    24                     // 计算距离时不进行开根运算, 以保证精度
    25                     record[dis(points[i], points[j])] += 1;
    26 
    27             for(unordered_map<int, int>::iterator iter = record.begin() ; iter != record.end() ; iter ++)
    28                 res += (iter->second) * (iter->second - 1);
    29         }
    30         return res;
    31     }
    32 
    33 private:
    34     int dis(const vector<int> &pa, const vector<int> &pb){
    35         return (pa[0] - pb[0]) * (pa[0] - pb[0]) +
    36                (pa[1] - pb[1]) * (pa[1] - pb[1]);
    37     }
    38 };
    39 
    40 int main() {
    41     vector<vector<int>> vec;
    42     vector<int> vn;
    43     
    44     vn.push_back(0);
    45     vn.push_back(0);
    46     vec.push_back(vn);
    47     vn.clear();
    48 
    49     vn.push_back(1);
    50     vn.push_back(0);
    51     vec.push_back(vn);
    52     vn.clear();
    53     
    54     vn.push_back(2);
    55     vn.push_back(0);
    56     vec.push_back(vn);
    57     vn.clear();
    58     
    59     cout << Solution().numberOfBoomerangs(vec) << endl;
    60     return 0;
    61 }
    View Code

    相关

    • 149 Max Points on a Line
  • 相关阅读:
    Quick Sort
    Binary Search
    trollcave解题
    Openvas简介
    SMB扫描-Server Message Block 协议、nmap
    漏洞基本概念
    防火墙识别、负载均衡识别、waf识别
    Centos7下部署Python项目
    Python-Redis数据类型操作
    MySQL的事务隔离级别
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12618936.html
Copyright © 2011-2022 走看看