Leetcode刷题100天—447. 回旋镖的数量( 哈希表)—day37

举报
神的孩子在歌唱 发表于 2021/10/18 21:00:07 2021/10/18
【摘要】 前言:作者:神的孩子在歌唱大家好,我叫运智 447. 回旋镖的数量难度中等176收藏分享切换为英文接收动态反馈给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。返回平面上所有回旋镖的数量。示例 1:输入:poi...

前言:

作者:神的孩子在歌唱

大家好,我叫运智

image-20210913135129838

447. 回旋镖的数量

难度中等176收藏分享切换为英文接收动态反馈

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

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

示例 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
  • 所有点都 互不相同
package 哈希表;

import java.util.HashMap;
import java.util.Map;

/*
 * https://leetcode-cn.com/problems/number-of-boomerangs/
 * 解题思路:
 * 1. 一个个点遍历,通过两点之间确定距离公式k^2=(y1-x1)^2+(x1-x2)^2获取距离
 * 2. 通过哈希遍历保存每两个点的距离,要是相同就加一
 * 3. 在遍历哈希获取每个距离统计的次数n,通过公式n(n-1)获取排列次数
 */
public class _447_回旋镖的数量 {
    public int numberOfBoomerangs(int[][] points) {
//    	定义一个返回值
    	int sum=0;
//		遍历每一个点
    	for(int i=0;i<points.length;i++) {
//    		将每两个点的距离存入哈希.相同的距离就加一
//			设置哈希
			HashMap<Integer, Integer> map=new HashMap<>();
    		for(int j=0;j<points.length;j++) {

//    			获取距离
    			int distance=(points[i][0]-points[j][0])*(points[i][0]-points[j][0])
    					+(points[i][1]-points[j][1])*(points[i][1]-points[j][1]);
//    			存入哈希
    			map.put(distance, map.getOrDefault(distance, 0)+1);
    		}
    		System.out.print(map);
//        	遍历完后就开始遍历哈希,因为已经知道每个j点跟i点距离的次数了,获取这些j点的排雷顺序就可以了
        	for(Map.Entry<Integer, Integer> entry:map.entrySet()) {
        		int value=entry.getValue();
//        		如果更i点距离相同的次数大于1就能排序
        		if (value>1) {
					sum+=value*(value-1);
				}
        	}
    	}

    	return sum;
    }
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。