leetcode.447 回旋镖的数量
这道题,有几点:
1、首先固定一个点,然后求其他点到这个点的距离集合,
2、在这个距离集合中,相等距离的有m个,则回旋镖数就有组合C(m, 2) * 2个,
3、回到步骤1
有个优化的方法,在存储距离的时候,可以使用map来存储,来减少求相等距离的时间,效率提高的还是特别大的
方法一,不适用map来存距离,用vector存储:
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
long len = points.size();
if(len == 0 || len == 1)
return 0;
vector<double> distance;
int ret = 0;
vector<int> visit;
for(int i = 0; i < len; i++){
for(int j = 0; j < len; j++)
distance.push_back(sqrt(pow(points[i].first-points[j].first, 2) + pow(points[i].second - points[j].second, 2)));
visit.resize(distance.size());
for(int k = 0; k < distance.size(); k++){
if(!visit[k]){
visit[k] = 1;
int cnt = 1;
for(int j = k + 1; j < distance.size(); j++){
if(!visit[j]){
if(distance[j] == distance[k]){
visit[j] = 1;
cnt++;
}
}
}
if(cnt >= 2)
ret += (cnt * (cnt - 1));
}
}
distance.clear();
visit.clear();
}
return ret;
}
};
运行时间:1180ms
方法二:用map存储距离
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
long len = points.size();
if(len == 0 || len == 1)
return 0;
map<int, int> distance;
int ret = 0, x, y;
for(int i = 0; i < len; i++){
for(int j = 0; j < len; j++){
x = points[i].first-points[j].first; y = points[i].second - points[j].second;
distance[x*x + y*y]++;
}
for(auto it : distance)
ret += it.second * (it.second - 1);
distance.clear();
}
return ret;
}
};
运行时间:268ms
方法三: 使用undered_map来存储距离
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
long len = points.size();
if(len == 0 || len == 1)
return 0;
unordered_map<int, int> distance;
int ret = 0, x, y;
for(int i = 0; i < len; i++){
for(int j = 0; j < len; j++){
x = (points[i].first-points[j].first), y = (points[i].second - points[j].second);
distance[x*x + y*y]++;
}
for(auto it : distance)
ret += it.second * (it.second - 1);
distance.clear();
}
return ret;
}
};
运行时间: 156ms
leetcode.447 回旋镖的数量相关推荐
- [LeetCode] 447.回旋镖的数量(Easy)C语言题解
题目 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回 ...
- LeetCode 447. 回旋镖的数量(哈希map+组合数)
1. 题目 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...
- 回旋数字c语言数组,LeetCode 447*. 回旋镖的数量(Python)
给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回旋镖的 ...
- 447. 回旋镖的数量
447. 回旋镖的数量 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] .回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的 ...
- 447 回旋镖的数量(暴力枚举)
1. 问题描述: 给定平面上 n 对互不相同的点 points ,其中 points[i] = [xi, yi] .回旋镖是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i ...
- 447 回旋镖的数量
题目描述: 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...
- 「每日一题」回旋镖的数量
这是 LeetCode 上 2021-9-13 的每日一题:「447. 回旋镖的数量」 1. 题目描述 给定平面上n对互不相同的点points,其中points[i] = [xi, yi].回旋镖是由 ...
- LeetCode(447)——回旋镖的数量(JavaScript)
给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回旋镖的 ...
- 《LeetCode之每日一题》:148.回旋镖的数量
回旋镖的数量 有关题目 题解 题目链接: 回旋镖的数量 有关题目 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] .回旋镖 是由点 (i, j, k ...
最新文章
- 华胜天成1.18亿美元收购美国GD公司
- python输出数据到excel-python实现数据导出到excel的示例--普通格式
- Spring Session实战3
- ios截屏 u3d导出Xcode工程截屏
- 怎么做一个定时消息提醒_如何用Nodejs编写一个定时消息提醒应用?
- 如何查看hadoop是32位还是64位
- 计算机加经济学加自动化,MIT经济学家戳破机器人真相:除了能取代你,价值微乎其微...
- 避免软件失败的7个关键实践——来自项目管理群的讨论
- chrome开发者工具实现网页截长图
- matlab 双曲线拟合,利用MATLAB进行logistic曲线拟合
- Android SDK是什么
- 响应式Web设计在跨终端广告创意中的应用
- 自定义带放大镜功能的图片剪裁框
- 无需代码,1秒搞定QQ和微信多开!
- 神经胶质瘤是怎么引起的,胶质瘤和神经胶质瘤
- C#+Arduino使用红外遥控器
- 一个测试岗面了 30 多人,100多个人投简历,真的太卷了,不能再真实了....
- 第二章 74181中的先行进位问题
- 高级数据操作--连接查询
- 高中信息技术python及答案_高中信息技术《Python语言》模块试卷.doc
热门文章
- Python程序流程控制
- 修改Windows系统盘盘符
- 11对战平台在wayos进程分线下下载地图慢的解决
- win7自带一键还原怎么用?
- python+requests+pytest 接口自动化框架(四)
- MIPS体系结构学习笔记
- Ubuntu Budgie 18.04 软件环境配置与CUDA 9.1、cuDNN7.1、Pytorch安装
- 基于单片机的地铁(公交)无线控制报站系统设计 地铁报站系统设计 公交报站系统设计
- 抖音音乐号副业项目,创新玩法解密
- 虹科分享 | 加密U盘 | 何时使用USB驱动器进行备份(何时不用)