[刷题] 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 }
- 用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 }
相关
- 149 Max Points on a Line
[刷题] 447 Number of Boomerangs的更多相关文章
- 447. Number of Boomerangs 回力镖数组的数量
[抄题]: Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple ...
- [LeetCode]447 Number of Boomerangs
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
- 34. leetcode 447. Number of Boomerangs
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
- 447. Number of Boomerangs
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
- [LeetCode&Python] Problem 447. Number of Boomerangs
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
- LeetCode 447. Number of Boomerangs (回力标的数量)
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
- 【LeetCode】447. Number of Boomerangs 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 [LeetCode] 题目地址:https:/ ...
- 447 Number of Boomerangs 回旋镖的数量
给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序).找到所有回旋镖的数量.你可以假设 n ...
- 【leetcode】447. Number of Boomerangs
题目如下: 解题思路:我首先用来时间复杂度是O(n^3)的解法,会判定为超时:后来尝试O(n^2)的解法,可以被AC.对于任意一个点,我们都可以计算出它与其余点的距离,使用一个字典保存每个距离的点的数 ...
随机推荐
- Python脚本打包成exe执行文件
需求 一个教辅目录结构检查工具,目录结构是[书籍]-[章节]-[题目|答案]-[*.jpg],后台有个异步处理的服务,需要强依赖这个目录结构. 书籍解析是单独的pipeline,日志对用户不可见,这里 ...
- mysql基础自学
1.1基础查询 语法:select 查询列表 from 表名;注意:1.查询列表可以是:表中的字段.常量值.表达式.函数2.查询的结果是一个虚拟表格 完整的写法是:先声明使用哪个库,再写SQL语 如果 ...
- Dapper, Ef core, Freesql 插入大量数据性能比较(一)
需求:导入9999行数据时Dapper, Ef core, Freesql 谁的性能更优,是如何执行的,级联增加谁性能更佳. 确认方法:sql server 的 sys.dm_exec_query_s ...
- 201871030126-王会娟 实验二 个人项目—《D{0-1} KP》项目报告
项目 内容 课程班级博客链接 https://home.cnblogs.com/u/wanghuijuan815 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh ...
- 软工案例分析之OJ
项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 和我的团队开发一个真正的软件,一起提升开发与合作的能力 这 ...
- OO第三单元个人总结
OO第三单元个人总结 JML理论与基础与应用工具链 JML是什么? Java建模语言(JML)是一种行为接口规范语言,可用于指定Java模块的行为 .它结合了Eiffel的契约设计方法 和Larch ...
- MySQL性能压力基准测试工具sysbench
1.sysbench介绍 这里介绍一款MySQL数据库的压力测试软件sysbench,用它来进行基准测试. sysbench 是一个开源的.模块化的.跨平台的多线程性能测试工具, 可以用来进行CPU. ...
- day-4 xctf-pwn CGfsb
xctf-pwn CGfsb 传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id= ...
- Spring Boot 2.x 快速集成Kafka
1 Kafka Kafka是一个开源分布式的流处理平台,一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据.Kafka由Scala和Java编写,2012年成为Apache ...
- [高清文字版]R语言实战(可复制文字PDF)
电子书资源:R语言实战 书籍简介 <R语言实战>从解决实际问题入手,尽量跳脱统计学的理论阐述来讨论R语言及其应用,讲解清晰透澈,极具实用性.作者不仅高度概括了R语言的强大功能.展示了各 ...