算法每日一题:回旋镖的数量 | 坐标距离 | 哈希

hello,大家好,我是星恒

今天给大家带来的每日一题是有关路径距离的题目,其中还涉及到了hash的使用,我们话不多说,直接来看题目:

题目: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 <= xi, yi <= 104
  • 所有点都 互不相同

分析:

我们先来说这道题目的思路:

这道题目的意思是,让我们在给的points点中寻找3个点,这三个点可以构成回旋镖型,也就是v字型,某一点距离其他两个点的距离相等

我们可以枚举中间点,然后找到与这个点相等距离的点,最后我们可以找到一些和这个点距离相同的点,然后由于考虑元组顺序(就是i,j,k和k,j,i不同),我们将这些距离相等的点排列组合,假设有m个点和这个点距离相等,他的排列组合种类有:

Am2 = m(m - 1)

所以我们只要得到有多少个点和这个点距离相等,当然,由于相等距离也有好几种情况,所以我们使用hash将距离的情况存储起来,只要遇到和这种情况相同的,就将他的相等点 + 1

我们来看代码

题解:

java 复制代码
class Solution {
    public int numberOfBoomerangs(int[][] points) {
        int ans = 0;
        for (int[] p : points) {
            Map<Integer, Integer> cnt = new HashMap<Integer, Integer>();
            for (int[] q : points) {
                int dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]);
                cnt.put(dis, cnt.getOrDefault(dis, 0) + 1);
            }
            for (Map.Entry<Integer, Integer> entry : cnt.entrySet()) {
                int m = entry.getValue();
                ans += m * (m - 1);
            }
        }
        return ans;
    }
}

注意:

  • 距离的计算直接使用平方即可,不用开方,这是求距离的常用技巧
  • cnt.getOrDefault(dis, 0),map中的getOrDefault()方法很常用,这里意思是获取键为dis的值,如果没有,就默认他为0
  • 这里涉及到的hash的遍历,也是一个小注意点

如果大家有什么思考和问题,可以在评论区讨论,也可以私信我,很乐意为大家效劳。

好啦,今天的每日一题到这里就结束了,如果大家觉得有用,可以可以给我一个小小的赞呢,我们下期再见!

相关推荐
叶小鸡1 分钟前
小鸡玩算法-力扣HOT100-动态规划(上)
算法·leetcode·动态规划
LuminousCPP7 分钟前
数据结构 - 线性表第三篇:基于顺序表实现 C 语言通讯录(基础功能篇)
c语言·数据结构·经验分享·笔记·算法
_日拱一卒11 分钟前
LeetCode:114二叉树展开为链表
java·开发语言·算法
无小道21 分钟前
Redis——哈希类型相关指令
redis·算法·哈希算法
凌波粒23 分钟前
LeetCode--513.找树左下角的值(二叉树)
java·算法·leetcode
一个不知名程序员www23 分钟前
算法学习入门---算法题DAY1
c++·算法
子琦啊28 分钟前
构造函数、this指向和原型链机制
javascript·算法·贴图
WHS-_-202230 分钟前
Millimeter Wave ISAC-SLAM: Framework and RFSoC Prototype
人工智能·算法·原型模式
吃好睡好便好31 分钟前
在Matlab中绘制杆状图
开发语言·学习·算法·matlab·信息可视化
带带弟弟学爬虫__32 分钟前
dyAPP数据采集-个人主页、发布、搜索、评论
服务器·python·算法·flutter·java-ee·django