这道题,有几点:

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 回旋镖的数量相关推荐

  1. [LeetCode] 447.回旋镖的数量(Easy)C语言题解

    题目 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回 ...

  2. LeetCode 447. 回旋镖的数量(哈希map+组合数)

    1. 题目 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...

  3. 回旋数字c语言数组,LeetCode 447*. 回旋镖的数量(Python)

    给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回旋镖的 ...

  4. 447. 回旋镖的数量

    447. 回旋镖的数量 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] .回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的 ...

  5. 447 回旋镖的数量(暴力枚举)

    1. 问题描述: 给定平面上 n 对互不相同的点 points ,其中 points[i] = [xi, yi] .回旋镖是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i  ...

  6. 447 回旋镖的数量

    题目描述: 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...

  7. 「每日一题」回旋镖的数量

    这是 LeetCode 上 2021-9-13 的每日一题:「447. 回旋镖的数量」 1. 题目描述 给定平面上n对互不相同的点points,其中points[i] = [xi, yi].回旋镖是由 ...

  8. LeetCode(447)——回旋镖的数量(JavaScript)

    给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回旋镖的 ...

  9. 《LeetCode之每日一题》:148.回旋镖的数量

    回旋镖的数量 有关题目 题解 题目链接: 回旋镖的数量 有关题目 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] .回旋镖 是由点 (i, j, k ...

最新文章

  1. 华胜天成1.18亿美元收购美国GD公司
  2. python输出数据到excel-python实现数据导出到excel的示例--普通格式
  3. Spring Session实战3
  4. ios截屏 u3d导出Xcode工程截屏
  5. 怎么做一个定时消息提醒_如何用Nodejs编写一个定时消息提醒应用?
  6. 如何查看hadoop是32位还是64位
  7. 计算机加经济学加自动化,MIT经济学家戳破机器人真相:除了能取代你,价值微乎其微...
  8. 避免软件失败的7个关键实践——来自项目管理群的讨论
  9. chrome开发者工具实现网页截长图
  10. matlab 双曲线拟合,利用MATLAB进行logistic曲线拟合
  11. Android SDK是什么
  12. 响应式Web设计在跨终端广告创意中的应用
  13. 自定义带放大镜功能的图片剪裁框
  14. 无需代码,1秒搞定QQ和微信多开!
  15. 神经胶质瘤是怎么引起的,胶质瘤和神经胶质瘤
  16. C#+Arduino使用红外遥控器
  17. 一个测试岗面了 30 多人,100多个人投简历,真的太卷了,不能再真实了....
  18. 第二章 74181中的先行进位问题
  19. 高级数据操作--连接查询
  20. 高中信息技术python及答案_高中信息技术《Python语言》模块试卷.doc

热门文章

  1. Python程序流程控制
  2. 修改Windows系统盘盘符
  3. 11对战平台在wayos进程分线下下载地图慢的解决
  4. win7自带一键还原怎么用?
  5. python+requests+pytest 接口自动化框架(四)
  6. MIPS体系结构学习笔记
  7. Ubuntu Budgie 18.04 软件环境配置与CUDA 9.1、cuDNN7.1、Pytorch安装
  8. 基于单片机的地铁(公交)无线控制报站系统设计 地铁报站系统设计 公交报站系统设计
  9. 抖音音乐号副业项目,创新玩法解密
  10. 虹科分享 | 加密U盘 | 何时使用USB驱动器进行备份(何时不用)