LeetCode 447.回旋镖的数量

给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的欧式距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。

返回平面上所有回旋镖的数量。

示例 1:

输入:points = [[0,0],[1,0],[2,0]]

输出:2

解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]

示例 2:

输入:points = [[1,1],[2,2],[3,3]]

输出:2

示例 3:

输入:points = [[1,1]]

输出:0

提示:

n == points.length

1 <= n <= 500

points[i].length == 2

-104^44 <= xi, yi <= 104^44

所有点都 互不相同

遍历回旋镖的中点,然后看有多少个点到中点的距离相等:

cpp 复制代码
class Solution {
public:
    int numberOfBoomerangs(vector<vector<int>>& points) {
        unordered_map<int, int> cnt;

        int ans = 0;
        for (vector<int> &pointi : points) {
            cnt.clear();
            for (vector<int> &pointjk : points) {
                int distance = (pointi[0] - pointjk[0]) * (pointi[0] - pointjk[0]) + 
                               (pointi[1] - pointjk[1]) * (pointi[1] - pointjk[1]);
                if (cnt.find(distance) != cnt.end()) {
                    ans += cnt[distance];
                }

                ++cnt[distance];
            }
        }

        return ans * 2;
    }
};

如果有n个点,则此算法时间复杂度为O(n2^22),空间复杂度为O(n)。

相关推荐
周末也要写八哥7 分钟前
算法实例分析:使数组相等的最小开销
算法
吃好睡好便好10 分钟前
在Matlab中绘制质点运动轨迹图
开发语言·学习·算法·matlab·信息可视化
爱炼丹的James13 分钟前
第三章 搜索和图论
数据结构·算法·图论
菜菜笔记14 分钟前
【无标题】
算法
努力努力再努力wz19 分钟前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
酉鬼女又兒21 分钟前
零基础入门计算机组成原理:控制器章节全考点汇总 | 寄存器 + 控制存储器 + 微指令
考研·职场和发展·计算机外设
Gauss松鼠会26 分钟前
GaussDB(DWS) 资源监控Topsql
java·网络·数据库·算法·oracle·性能优化·gaussdb
夏日听雨眠27 分钟前
数据结构(快速排序)
java·数据结构·算法
薇茗28 分钟前
【初阶数据结构】 升沉有序的平仄 排序 3
c语言·开发语言·数据结构·算法·排序算法·文件归并排序
薇茗30 分钟前
【初阶数据结构】 升沉有序的平仄 排序 2
c语言·数据结构·算法·排序算法·快排精讲