Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【面试高频题】难度 1.5/5,简单常见的「哈希表」笔试/面试题

【面试高频题】难度 1.5/5,简单常见的「哈希表」笔试/面试题

作者头像
宫水三叶的刷题日记
发布于 2022-04-06 13:42:39
发布于 2022-04-06 13:42:39
36400
代码可运行
举报
运行总次数:0
代码可运行

题目描述

这是 LeetCode 上的「447. 回旋镖的数量」,难度为「中等」

Tag : 「哈希表」、「模拟」给定平面上n 对 互不相同 的点 points ,其中 points[i]=[xi,yi] 。回旋镖 是由点 (i,j,k) 表示的元组 ,其中 ij 之间的距离和ik 之间的距离相等(需要考虑元组的顺序)。

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

示例 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:points = [[0,0],[1,0],[2,0]]

输出:2

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

示例 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:points = [[1,1],[2,2],[3,3]]

输出:2

示例 3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:points = [[1,1]]

输出:0

提示:

  • n==points.length
  • 1<=n<=500
  • points[i].length==2
  • 104<=xi,yi<=104
  • 所有点都 互不相同

哈希表

数据范围为 500 ,三层循环的朴素做法显然会 TLE。

对于每个回旋镖三元组而言,本质上我们在统计给定i 的情况下,与i 距离相等的(j,k) 组合个数为多少。

我们可以使用哈希表进行预处理,在统计以i 为三元组第一位的回旋镖个数前,先计算出 i 和其余点的距离,并以 {距离:个数} 的形式进行存储,然后分别对所有的距离进行累加计数。

在计算距离时为了避免使用 sqrt,我们直接使用 x2+y2 来代指两点间的距离。

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public int numberOfBoomerangs(int[][] points) {
        int n = points.length;
        int ans = 0;
        for (int i = 0; i < n; i++) {
            Map<Integer, Integer> map = new HashMap<>();
            for (int j = 0; j < n; j++) {
                if (i == j) continue;
                int x = points[i][0] - points[j][0], y = points[i][1] - points[j][1];
                int dist = x * x + y * y;
                map.put(dist, map.getOrDefault(dist, 0) + 1);
            }
            for (int dist : map.keySet()) {
                int cnt = map.get(dist);
                ans += cnt * (cnt - 1);
            }
        }
        return ans;
    }
}
  • 时间复杂度
  • 空间复杂度

最后

这是我们「刷穿 LeetCode」系列文章的第 No.447 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宫水三叶的刷题日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 447. 回旋镖的数量
https://leetcode-cn.com/problems/number-of-boomerangs/
freesan44
2021/10/04
2380
LeetCode 447. 回旋镖的数量
​LeetCode刷题实战447:回旋镖的数量
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/11/25
2080
每天一算: Number of Boomerangs
leetcode上第447号问题:Number of Boomerangs 给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 > i 和 k 之间的距离相等(需要考虑元组的顺序)。 找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。 示例: 输入: [[0,0],[1,0],[2,0]] 输出: 2 解释: 两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [
五分钟学算法
2018/11/20
6090
LeetCode 447. 回旋镖的数量(哈希map+组合数)
给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。
Michael阿明
2020/07/13
3170
几道和散列(哈希)表有关的面试题
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。
五分钟学算法
2019/03/19
1.5K0
几道和散列(哈希)表有关的面试题
【面试高频题】难度 3/5,近期面试原题(简单计算几何运用)
为了避免除法精度问题,当我们枚举两个点 和 时,不直接计算其对应直线的 斜率和 截距,而是通过判断 和
宫水三叶的刷题日记
2022/10/30
4170
【面试高频题】难度 3/5,近期面试原题(简单计算几何运用)
用javascript分类刷leetcode16.set&map(图文视频讲解)_2023-03-01
集合与字典 : 集合常见的形式是Set,字典常见的形式是Map Set 和 Map 主要的应用场景在于 数据重组 和 数据储存。 集合 与 字典 的区别: 共同点:集合、字典 可以储存不重复的值 不同点:集合类似于数组,元素的只有key没有value,value就是key。字典是以 key, value 的形式储存,键的范围不限于字符串,各种类型的值(包括对象)都可以当作键 时间复杂度: set或map可以用哈希表或平衡二叉搜索树实现 哈希表实现的map或者set查找的时间复杂度是`O(1)`,哈希表优点是
用户10358815
2023/03/01
6360
【LeetCode 204】关关的刷题日记40 Number of Boomerangs
关关的刷题日记40 – Leetcode 447. Number of Boomerangs 题目 Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of points (i, j, k) such that the distance between i and j equals the distance between i and k (the order of the tuple ma
WZEARW
2018/04/10
7450
Leetcode 447. 回旋镖的数量
给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。
zhipingChen
2020/02/25
4220
程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)
给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]。 请找出一条直线,其通过的点的数目最多。
Michael阿明
2020/07/13
3870
【综合笔试题】难度 4/5,有一定代码量的图论搜索题
这是 LeetCode 上的 「675. 为高尔夫比赛砍树」 ,难度为 「困难」。
宫水三叶的刷题日记
2022/12/30
3830
【综合笔试题】难度 4/5,有一定代码量的图论搜索题
【Leetcode】447回旋镖的数量
package Leetcode真题分门别类.查找表相关问题; import java.util.HashMap; import java.util.Map; /** * @Author bennyrhys * @Date 2020-05-14 11:35 * 思路: * 暴力O(N^3)不可取,500可以O(n^2) * jk到点i的相同距离,map(距离,存在的点个数)。 * 可选择的个数n! * * 复杂度: * 时间O(N^2) * 空间O(N) * * 注意: * 空
瑞新
2020/07/07
2070
【面试高频题】难度 2.5/5,多解法经典面试笔试题
这是 LeetCode 上的「786. 第 K 个最小的素数分数」,难度为「中等」。
宫水三叶的刷题日记
2022/10/30
2790
【面试高频题】难度 2.5/5,多解法经典面试笔试题
【综合笔试题】难度 2.5/5 :「树状数组」与「双树状数组优化」
的出现次数)」以及「区间查询(查询某段范围内数的个数)」,使用「树状数组」求解较为合适。
宫水三叶的刷题日记
2022/06/21
9700
【综合笔试题】难度 1.5/5,常见构造模拟题
根据题意,我们可以先使用双端队列对 deck 进行一次模拟,并用哈希表记下每个元素
宫水三叶的刷题日记
2023/08/10
2630
【综合笔试题】难度 1.5/5,常见构造模拟题
【面试高频题】难度 1.5/5,常规滑动窗口运用题
一位老师正在出一场由 n道判断题构成的考试,每道题的答案为 true (用 'T' 表示)或者 false (用 'F' 表示)。老师想增加学生对自己做出答案的不确定性,方法是最大化有连续相同结果的题数。(也就是连续出现 true 或者连续出现 false)。
宫水三叶的刷题日记
2022/12/30
2570
【面试高频题】难度 1.5/5,常规滑动窗口运用题
【面试高频题】难度 1.5/5,常见构造题(近期原题)
Tag : 「模拟」、「构造」现有一份 次投掷单个「六面」骰子的观测数据,骰子的每个面从 到 编号。观测数据中缺失了 份,你手上只拿到剩余 次投掷的数据。幸好你有之前计算过的这 次投掷数据的平均值。
宫水三叶的刷题日记
2022/10/30
4280
【综合笔试题】难度 3/5,近期小厂面试原题
这是 LeetCode 上的「1239. 串联字符串的最大长度」,难度为「中等」。
宫水三叶的刷题日记
2023/02/27
2920
【面试高频题】难度 1.5/5,常见字符串线性 DP 运用题
这是 LeetCode 上的「467. 环绕字符串中唯一的子字符串」,难度为「中等」。
宫水三叶的刷题日记
2022/11/01
3400
【面试高频题】难度 4/5,常规解法与数据结构优化解法
单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。
宫水三叶的刷题日记
2021/11/02
6680
推荐阅读
相关推荐
LeetCode 447. 回旋镖的数量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验