【每日一题】回旋镖的数量
Tag
【组合数学】【数组】【2024-01-08】
题目来源
解题思路
方法一:组合数学
思路
以数组 points
中的每一个为回旋镖的中心 i
,在数组 points
中找距离中心 i
相等的一对点,于是可以先试用一个哈希表来记录到中心 i
的不同距离的个数,再在这些不同距离的个数中取出两个元素,与中心 i
构成回旋镖的位置。
算法
class Solution {
public:
int numberOfBoomerangs(vector<vector<int>>& points) {
int res = 0;
for (auto &p : points) {
unordered_map<int, int> cnts;
for (auto &q : points) {
int dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) *(p[1] - q[1]);
++cnts[dis];
}
for (auto&[_, m] : cnts) {
res += m * (m-1);
}
}
return res;
}
};
复杂度分析
时间复杂度:
O
(
n
2
)
O(n^2)
O(n2),
n
n
n 为数组 points
的长度。
空间复杂度: O ( n ) O(n) O(n)。
写在最后
如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。
如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。
最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!